Help us understand the problem. What is going on with this article?

多段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-------  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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away