そもそもsshとは
- SSH(Secure SHell)による暗号化通信を利用してホストに接続します。これにより、実行コマンド及び、ログイン時のユーザ名やパスワードが暗号化されてホストへ送られるようになります。 (IT専科)
http://www.itsenka.com/contents/development/unix-linux/ssh.html
テスト環境をいじる必要があり、sshを利用する機会がありました。ただ、ガッツリ、permission deniedで引っかかってしまったので、その備忘録です。多段sshした結果、agent forwardができてないことが原因でした。
Permission deniedになるまでの経緯
テスト環境に入るために、
本番サーバーにssh -> テストサーバーにssh -> コマンド実行
という流れが必要でした。
そのため、
$ ssh hoge@000.000.0.000
$ password入力
// 本番サーバーに接続
$ ssh -p ポート番号 hoge@000.000.0.000 -A
$ password入力
// テストサーバーに接続
// コマンド実行
という順序です。実は、この段階で既に間違っていました。
というのも、1行目に
$ ssh hoge@000.000.0.000
と、本番サーバーに対して -A オプションを付けておりませんでした。ここからは、どうやって-Aオプションが無いことに気づくかという話になります。
ローカルと本番での差異
今回の分かりづらい点として、
ローカルだと
$ ssh -T hogehoge.jp
Hi ! You've successfully authenticated, but Backlog does not provide shell access.
と表記されるのに対し
本番サーバー -> テストサーバーにアクセスした際、
$ ssh -T hogehoge.jp
Permission denied (publickey).
となってしまうことです。ローカルでは通っているのに、本番で通らないのはなぜ?となってしまっています。
更に言えば、本番サーバーをいじる必要が今回なかった為、テストサーバーにだけ注意がいってしまうのです。
多段sshをする際には、十分気をつけていきたいところです。
また、~/.ssh/configの記述も
Host @hoge.jp
User hoge
IdentityFile ~/.ssh/id_rsa_hogehoge
HostName hoge.jp
StrictHostKeyChecking no
と、別段気に留める部分もない為、時間がかかってしまいました。
テストサーバーでdeniedなら、本番サーバーを疑う
色々と試行錯誤していたところ
$ ssh hoge@000.000.0.000
$ password入力
// 本番サーバーに接続
$ ssh -T hogehoge.jp
Permission denied (publickey).
と、本番サーバーの時点で Permission deniedになっていたことが判明。
「あぁ・・」と納得して、
$ ssh hoge@000.000.0.000
の部分を
$ ssh hoge@000.000.0.000 -A
とオプションを付けることで、解決できました。
所感
普段、クライアントサイドをいじっていて、中々サーバー側を触る機会が少ないので、今回四苦八苦ながら良い経験でした。多段構成でsshを渡すときには、オプションを付けることを忘れないようにしたい。