- ~/.ssh/id_rsa.pub(例:C:\Users\ユーザー名\.ssh\id_rsa.pub)として公開鍵がすでに生成されている
- 送付先サーバーはSSH接続でパスワード認証が有効になっている
以上の条件を満たしてPowerShellで以下のコマンドを実行します。
見やすくするために ` で改行しています。1行ずつではなく以下の5行をまとめてご使用ください。
cat ~/.ssh/id_rsa.pub | ssh ${user}@${host} `
" `
mkdir -p ~/.ssh && chmod 700 ~/.ssh && `
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys `
"
ssh ${user}@${host}
の部分は適宜変更してください。
例:ssh user@123.456.78.99
実行後パスワードが求められるので入力します。
もう一度
ssh ${user}@${host}
でパスワード入力が求められずにSSH接続できれば成功です。
パスワード認証の設定を有効にした場合は無効化しておくのをお忘れなく。
環境
-
公開鍵送付元
- windows10 home
- PowerShell 5.1
- OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4
-
公開鍵送付先
- centos7.4
解説
cat ~/.ssh/id_rsa.pub
powershellのcat(Get-Contentのエイリアス)で公開鍵を取得します。
mkdir -p ~/.ssh && chmod 700 ~/.ssh
mkdirの-pオプションで~/.sshディレクトリが存在しなければ新規作成、新規作成した場合は~/.sshの権限を700に変更します。
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
authorized_keysを新規作成して公開鍵を書き込み、もしくはauthorized_keysが存在していれば追記します。
新規作成された場合は権限が644となっており他のユーザーから書き込みができないのでSSHで接続するには問題ありませんが、一般的な600に変更しておきます。
おまけ SSHパスワード認証を無効化するコマンド
ssh ${user}@${host} `
" `
sed -i 's/PasswordAuthentication.*/PasswordAuthentication no/g' /etc/ssh/sshd_config && `
systemctl restart sshd `
"
sedでPasswordAuthenticationをPasswordAuthentication noに書き換えたあとsshdを再起動しています。
参考
Is there an equivalent to ssh-copy-id for Windows?
mkdirでディレクトリが存在しない時だけディレクトリを作成する。
Disable PasswordAuthentication and Enable PubkeyAuthentication on Sakura VPS.