Edited at

多段SSHやポートフォワーディングを '.ssh/config' に書く

SSHまわりで色々苦労したので、自分用メモを残します。


SSHの設定 (~/.ssh/のパーミッションの設定)



  • ~/.ssh/ : SSHの設定ファイルを置く場所

  • パーミッションの設定がシビアなので注意

$ ls -al ~/.ssh/

drwx------@ . # ~/.ssh のパーミッションにも注意
drwxr-xr-x+ ..
-rw-r--r-- config # SSH の設定ファイル
-rw-r--r-- known_hosts
-rw-r--r-- authorized_keys # 秘密鍵置き場
-rw------- id_rsa # 秘密鍵
-rw-r--r-- id_rsa.pub # 公開鍵


パーミッションの設定

$ chmod 700 ~/.ssh


公開鍵認証


  • SSHを安全に行いたい

  • SSHするたびにパスワードを入力するのはめんどくさい


手順

クライアント側をclient、ホスト側(サーバなど)をhostとします。


1. クライアント側にてssh-keygenコマンドにて鍵のペアを作成


client

$ ssh-keygen -C "comment "                                      # -C はコメント(任意)

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/lasta/.ssh/id_rsa): # 生成される鍵のファイル名の指定(任意)
Enter passphrase (empty for no passphrase): # 鍵へのパスワード(任意) ※注1
Enter same passphrase again:

※注1

: ここでパスワードをかけると、公開鍵認証をした上でパスワードも求められます


2. ホストへ公開鍵(.pubファイル)を転送


client

$ scp ~/.ssh/id_rsa.pub user@host:~/



3. ホスト側にて公開鍵を登録


host

$ mkdir ~/.ssh

$ chmod 700 ~/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

鍵の登録が済んだら、host側ではid_rsa.pubを削除しても問題ありません。


公開鍵認証にてSSH接続を行う


client

$ ssh user@host -i ~/.ssh/id_rsa


パスワードを求められなかったら成功です。

秘密鍵の指定を毎度するのは面倒なので、対策はこの後説明します。


.ssh/config


  • SSHの設定ファイル

  • SSH接続の度に秘密鍵を指定するのは面倒

  • ホスト名とユーザー名を毎回書くのも面倒

  • 多段SSHの書き方いつも忘れる

  • shellのaliasは柔軟性がない(scpなどの時に困る)


client

$ ssh -i ~/.ssh/id_rsa user@host # この表記と

$ ssh host # この表記が等価になる


~/.ssh/config

Host         host           # 実際にコマンドで入力する名前 (任意)

HostName host.hoge.fuga # ホスト名
User user # ログインユーザ名
IdentityFile ~/.ssh/id_rsa # 秘密鍵のファイル名


多段SSH


  • client -> host1(踏み台サーバ) -> host2(目的のサーバ) とログインしたい

  • host2へ鍵を置くことも忘れない

user@local:~$ ssh user@host1

user@host1:~$ ssh user@host2

と毎度書くのは面倒です。

user@local:~$ ssh host2

だけで済ませたいですね。


~/.ssh/config

Host           host1

HostName host1.hoge.fuga
User user
IdentityFile ~/.ssh/id_rsa

Host host2
HostName host2.foo.bar
User user
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -CW %h:%p host1



ポートフォワーディング


  • アクセス制限がかかったウェブページを外部から閲覧したい

  • 同様な環境からメールを送受信したい

  • コマンドが複雑で分かり難い


ポートフォワーディングの例

ssh -L user@host.hoge.fuga 10025:localhost:25


と毎度書くのは面倒です。

ssh phost

だけで済ませたいです。


多段SSHかつポートフォワーディングの場合

Host           phost1

HostName host1.hoge.fuga
User user
GatewayPorts yes
LocalForward 10025 localhost:10025
IdentityFile ~/.ssh/id_rsa

Host phost2
HostName host2.hoge.fuga
User user
GatewayPorts yes
LocalForward 10025 host2.hoge.fuga:25
ProxyCommand ssh -CW %h:%p phost1
IdentityFile ~/.ssh/id_rsa