SSHまわりで色々苦労したので、自分用メモを残します。
SSHの設定 (~/.ssh/
のパーミッションの設定)
-
~/.ssh/
: SSHの設定ファイルを置く場所 - パーミッションの設定がシビアなので注意
$ ls -al ~/.ssh/
drwx------@ . # ~/.ssh のパーミッションにも注意
drwxr-xr-x+ ..
-rw-r--r-- config # SSH の設定ファイル
-rw-r--r-- known_hosts
-rw------- 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 10025:localhost:25 user@host.hoge.fuga
と毎度書くのは面倒です。
ssh phost
だけで済ませたいです。
多段SSHかつポートフォワーディングの場合
Host phost1
HostName host1.hoge.fuga
User user
LocalForward 10025 localhost:10025
IdentityFile ~/.ssh/id_rsa
Host phost2
HostName host2.hoge.fuga
User user
LocalForward 10025 host2.hoge.fuga:25
ProxyCommand ssh -CW %h:%p phost1
IdentityFile ~/.ssh/id_rsa