公開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ディレクトリを作成する方法があるかどうか疑問に思いました。
おかげで、
ダグ
ssh-copy-id
を使用一般に ssh-copy-id
は存在しないディレクトリまたはファイルを処理します。使用する 可能な場合 ;ホイールを再発明しないでください。
ssh-copy-id
なし(何らかの理由で)リモート側では、シェルでコマンドを実行します。さらにコマンドを実行します。余分なコマンドがcat
よりも前にstdinを消費しないことを確認してください(必要に応じて</dev/null
を使用してください)。ここでは、cd
もmkdir
も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
に限定されないことです。