ssh †
秘密鍵の形式変更 †
Fingerprint(フィンガープリント)の確認 †
sshコマンドでパスワード認証を強制する †
秘密鍵にパスフレーズを追加する †
Includeでssh/configを分割する †
OpenSSH 7.3以上で「Include」が使用可能になった。
ssh-copy-id: ERROR: failed to open ID †
Could not load host key: /etc/ssh/ssh_host_dsa_key †
messagesに以下のログが出続ける事があった。
「/etc/ssh/」以下に該当ファイルが無いのが原因
sshログイン時にコマンド実行 †
account is locked †
CentOS5でパスワードを設定せず、公開鍵認証だけのユーザで発生する
- /etc/shadow : パスワード部分が「!!」だと発生する
user01:!!:...
認証方式を固定する †
公開鍵認証やLDAPの検証など。
SSH接続が遅い場合 †
接続先がIPでも、何故かDNSの名前解決をしようとして遅い場合がある。
vim /etc/ssh/sshd_config
----
# 名前解決しない
UseDNS no
# IPv4を使う
AddressFamily inet
# GSSAPI 認証をしない
GSSAPIAuthentication no
----
sudo service sshd restart
ControlMasterのセッション確認と終了 †
- どのコントロールファイルを使っているか確認
ssh -O check github.com
- 接続を強制終了する
ssh -O exit github.com
ControlMaster:セッションを束ねて接続を早くする †
- ControlPersist はOpenSSH 5.6以降対応。CentOS6は5.3なので非対応
- 同一ホストへのパスワード認証も2回目はスキップされる
- 明示的に切断する
ssh -O exit <host>
秘密鍵から公開鍵を生成する †
公開鍵が無い場合でも、秘密鍵があれば生成できる
ssh-keygen -y -f ~/.ssh/test.pem
指定したコマンドのみ実行可能な公開鍵認証を設定する †
sshで特定のコマンドの実行だけ許可し、実行後すぐに切断する。
複数設定したい場合は、別の公開鍵を作成すれば良いだろう。
- 対象ホストの $HOME/.ssh/authorized_keys に追加する。例ではuptimeを実行
command="uptime",no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-rsa AAAAB3N...
- 実行結果
ssh user01@192.168.61.129
08:01:48 up 5 min, 2 users, load average: 0.00, 0.03, 0.00
Connection to 192.168.61.129 closed.
ssh-agent, ssh-addでパスフレーズ/秘密鍵を省略 †
秘密鍵のパスフレーズが有効な場合、1度だけ入力すれば良いようにできる。
また、踏み台経由でログインする等、複数の秘密鍵を登録しておくと便利。
パスワード認証をやめて公開鍵認証にする場合 †
- 鍵が無い場合、VMや PuTTYgen等で認証鍵を作る
ssh-keygen -t rsa -b 4096
- 個人の公開鍵を ~/.ssh/authorized_keys に登録
ssh-copy-id -i ~/.ssh/id_rsa.pub <username@example.com>
- sudoしたい場合は sudoers に登録
echo 'username ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/username
chmod 440 /etc/sudoers.d/username
- パスワード削除
passwd -d <username>
OpenSSLのHeartbleed bug修正後に発生した問題 †
Too many authentication failures ... †
sshd_configの検証 †
- 'sshd -t' で検証できる。正常なら 0 を返す
sudo sshd -t
/etc/ssh/sshd_config: line 139: Bad configuration option: hoge
/etc/ssh/sshd_config: terminating, 1 bad configuration options
echo $?
255
- /etc/ssh/sshd_config 以外のパスにあるファイルを検証する場合
sudo sshd -t -f /path/to/sshd_config
SSHで空パスワードでのログインを許可する †
- ローカルVMでCIツールと連動する場合など。
- 当然、インターネットに出ているサーバに設定してはいけない
ssh接続時に詳細を表示 †
並列SSH pssh(Parallel ssh) †
sshで複数の秘密鍵を使い分ける †
vi ~/.ssh/config
----
IdentityFile ~/.ssh/example1.pem
IdentityFile ~/.ssh/example2.pem
----
sshリモートコマンド †
ssh, scp接続時のフィンガープリントの確認をしない †
- 「Are you sure you want to continue connecting (yes/no)?」エラーが出る場合
sshでのタイムアウトを防ぐ †
SSH代替mosh †
対話処理の自動化 †
#!/bin/sh
fdasd /dev/dasdg << EOF
v
MYVOL1
w
EOF
ssh config †
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! †
このWARNはリモートホストが変わったという事
- コマンドで削除するか、「~/.ssh/known_host」から手動で消す。
ssh-keygen -R <hostname>
多段ssh/sshポートフォワーディング †
- OpenSSH 5.4 以上: '-W'オプション(netcat)が使えるので、簡単になる
- OpenSSH 5.3以下: 踏み台に ncコマンドが必要。(CentOS6.5はOpenSSH 5.3)
- 接続設定を~/.ssh/configに追加し、公開鍵認証を使う場合
- client.host上で gateway.host へ接続できるように設定
# 公開鍵がなければ作成(default: ~/.ssh/id_rsa)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub gw_user@gateway.host
# 接続できるか確認
ssh gw_user@gateway.host
- gateway.host 上で other.host へ接続できるように設定
ssh-copy-id -i ~/.ssh/id_rsa.pub other_user@other.host
# 接続できるか確認
ssh other_user@other.host
- client.host上の ~/.ssh/config に設定を追加
vim ~/.ssh/config
----
Host gateway.host
ProxyCommand none
User gw_user
IdentityFile ~/.ssh/id_rsa
Host other.host
User other_user
# OpenSSH version 5.4 or later:
ProxyCommand ssh -W %h:%p gateway.host
# OpenSSH version 5.3 or lower:
# sudo yum install nc
# ProxyCommand ssh gateway.host nc %h %p 2> /dev/null
IdentityFile ~/.ssh/id_rsa
----
- client.host上からユーザ、パスワード指定なしでother.hostに接続できれば成功
ssh other.host
scp dummy.txt other.host:/tmp/
- エラー「ssh_exchange_identification: Connection closed by remote host」の場合、.ssh/config の「 2> /dev/null」を削除して実行してみる。gatewayにncがインストールされていないとエラーになる。
bash: nc: コマンドが見つかりません
ssh_exchange_identification: Connection closed by remote host
公開鍵認証 †
- CentOS 7付属の openssh-7.4p1-21.el7.x86_64 で「ssh-keygen -N "" -t rsa」生成した場合
- デフォルト2048bit: -b 2048と同じ
- -t rsaを使う場合、今後は「-b 4096」が良さそう
公開鍵の登録 †
sshで必ずパスワードを要求されてしまうときは †
パスワードなしでログインしようとして、
authorized_keysに公開鍵を追加してもパスワードを要求されてしまう場合はオーナー、パーミッションを確認しましょう。
パーミッションの設定が正しくないと接続できないようです。
私が失敗したときは、~/.ssh/が0770でした。
filename | permission |
/home/user | OK: 0700 OK: 0755 NG: 0770 |
~/.ssh/ | 0700 |
~/.ssh/authorized_keys | 0600 |
sshでパスワードなしにログインする(公開鍵認証) †
公開鍵を作成し、それを相手サーバに登録する事でパスワード入力なしにログイン可能となる。
- 登録側ユーザになって、RSA鍵を作成する
$ su - hoge
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
/home/example/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
- 公開鍵(id_rsa.pub)を相手側サーバに登録する
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ scp $USER@$SSH_HOST:.ssh/{identity,id_rsa,id_dsa} ~/.ssh/
scp ~/.ssh/{id_rsa,id_rsa.pub,aut install P/PE/PETDANCE/ack-1.58.tar.gz