web-dev-qa-db-ja.com

ディレクトリがまだ存在しない場合、sshを使用してリモートLinuxディレクトリ内のファイルにcatするにはどうすればよいですか?

公開id_rsa.pubファイルをMacからLinuxサーバーのホームディレクトリにある〜/ .ssh/authorized_keysディレクトリに送信しようとしています。毎回ログインしなくてもアクセスできます。

Macターミナルから次のコマンドを使用しています。

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver 'cat >> ~/.ssh/authorized_keys'

これは、リモートの〜/ .sshディレクトリがすでに存在する場合は機能しますが、それ以外の場合は機能しません。その場合、最初にリモートサーバーにログインし、.sshディレクトリを作成してからログアウトしてから、上記のコマンドを実行する必要があります。その後、ログインせずにリモートサーバーにsshできます。

数十台のサーバーでこれを行う必要があるので、リモートの.sshディレクトリがまだない場合に、上記のコマンドを変更してリモート.sshディレクトリを作成する方法があるかどうか疑問に思いました。

おかげで、

ダグ

10
Doug Lerner

ssh-copy-idを使用

一般に ssh-copy-id は存在しないディレクトリまたはファイルを処理します。使用する 可能な場合 ;ホイールを再発明しないでください。


ssh-copy-idなし(何らかの理由で)

リモート側では、シェルでコマンドを実行します。さらにコマンドを実行します。余分なコマンドがcatよりも前にstdinを消費しないことを確認してください(必要に応じて</dev/nullを使用してください)。ここでは、cdmkdirもstdinを使用しないため、これは機能するはずです。

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver '
   cd ~/ || exit
   mkdir -pm 700 .ssh
   cat >> .ssh/authorized_keys
   chmod 600 .ssh/authorized_keys
'

ノート:

  • -pは、./.sshがディレクトリとしてすでに存在する場合、mkdirに文句を言わないようにします。
  • -m 700は、最初から正しいモードを設定します。

コードを改善することができます。私の主なポイントは、単一のcatに限定されないことです。

29