LoginSignup
5
5

More than 5 years have passed since last update.

SSHサーバに公開鍵をワンライナーで転送する

Last updated at Posted at 2016-07-29

はじめに

SSHのセキュリティ・利便性を飛躍的に高める公開鍵認証ですが、鍵を転送(特に2台目以降)するのに、ナイーブな方法では、サーバ側のシェルやSFTPのシェルにコマンドを手打ちしないといけないため、少し面倒です。ここでは、その転送を1行で済ませてしまいます。まず、下準備をします。

公開鍵の作成

cd ~/.ssh
ssh-keygen -f KEY_NAME
# (公開鍵にパスワード掛けたくない場合はエンター2回)

KEY_NAMEは秘密鍵のファイル名ですが、通常は省略してid_rsaとします。(省略した場合はエンター3回)公開鍵のファイル名はKEY_NAME.pubとなります。

プロファイル追加

~/.ssh/config
Host SERVER_ALIAS
HostName SERVER_ADDRESS
User LOGIN_USER
Port PORT_NUMBER
Identityfile ~/.ssh/KEY_NAME

SERVER_ALIASはサーバの短縮名、SERVER_ADDRESSはサーバのアドレスまたはドメイン名、LOGIN_USERはサーバにログインするユーザ名、PORT_NUMBERはサーバのポート番号(22番の場合は省略可)です。

鍵転送コマンド

ここが本題です。まず、ssh-copy-idというツールがあるかを確かめます。(基本的にあります)

ssh-copy-idがある場合

次のコマンドを入力し、サーバのパスワードを入れれば終了です。サーバのシェルがtcshなどC Shell系の場合は使えないかもしれません。

ssh-copy-id SERVER_ALIAS

ssh-copy-idが(使え)ない場合(おそらくレアケース)

次のコマンドを入力すると、サーバ側の公開鍵(転送する自ユーザーの公開鍵ではありません)を保存するか聞かれるので保存し、サーバのパスワードを入力します。これで転送は終了です。

cat ~/.ssh/id_rsa.pub | ssh SERVER_ALIAS 'umask 77 && mkdir -p .ssh && cat >> .ssh/authorized_keys'
# ↓2台目以降専用簡易コマンド↓
cat ~/.ssh/id_rsa.pub | ssh SERVER_ALIAS 'cat >> .ssh/authorized_keys'

SSHサーバのシェルがC Shell・tcshで万が一上のコマンドがダメな場合は次のようにします。

cat ~/.ssh/id_rsa.pub | ssh SERVER_ALIAS 'umask 77 && mkdir -p .ssh && cat >>! .ssh/authorized_keys'
# ↓2台目以降専用簡易コマンド↓
cat ~/.ssh/id_rsa.pub | ssh SERVER_ALIAS 'cat >>! .ssh/authorized_keys'

確認

サーバに再びSSHでログインします。

ssh SERVER_ALIAS

パスワードを聞かれずにログインできれば成功です。

SFTPではダメなのか

1台目ならmkdirchmodcdputの合わせ技でいけますが、2台目以降だと 鍵を手元にダウンロード→端末を別で開いて手元で追記→サーバに戻す という作業が必要で面倒です。しかし、今回のコマンドだと、1台目でも2台目以降でもワンライナーでいけます。

5
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5