外部接続できない環境でのバッチテスト(SSH、SCP、SFTP)
最近は仕事でWebサービスを担当するようになったのですが、開発でいろんなところでつまづきます(・ω・)
長年COBOLで期間システムを保守していた僕にはまだまだ知識不足を感じます。
今回つまづいたところはこんなところです。
- 開発環境でバッチプログラムのテストをしたい。
- 外部のサーバにSSH(SFTP、SCP)接続するロジックがある。
- 外部に接続できる環境ではない。 ⇒セキュリティの観点から、外への接続は閉じられている。本番環境でしか外への接続ができない。(テストできないじゃん(・ω・)
このような状態なので、当然外部サーバ接続ロジックで異常終了します。
ネットでいろいろ調べたり、インフラ担当者と相談して解決しましたので、その内容をブログで記録したいと思います。
対策
自分自身のサーバにSSH接続するように設定する!
(もっと言うと、自分自身のユーザに接続をします)
例えばユーザが「user1」の場合、SSHコマンド部分を以下のように置換して対処します。
ssh -i 鍵の場所 user1@127.0.0.1 #用途によってscp、sftpコマンドに置き換える
テスト時のみ自分自身(ローカルループバック(127.0.0.1))にSSH(SFTP)接続すれば、バッチが異常終了することなく、最後まで走行させることができます。
SSHにおける認証の優先について
僕が利用しているLinuxのユーザが基本パスワード認証であるため、パスワード認証を向こうにしないと、鍵認証ができないのでは?と思っていました。実際はそんな訳ではなく、
- 接続に鍵を指定していれば、鍵認証が優先
- 鍵の指定が無かったり、鍵認証に失敗した場合は、次の手段としてパスワード認証をする
ということでした。
僕「このユーザのパスワード認証無効にしてくれ(・ω・)」
インフラ担当「はぁ??なんでそんなことせないかんの(・ω・)」
と呆れられました・・・。