0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

sftpをバッチモードで動かすときは、known_hostsが追加済みでないといけない

Posted at

概要

sftpでファイル転送するスクリプトを展開したら、動かないと言われた
ログには Host key verification failed. としか出ていない
原因は以下だった
sftpコマンドをバッチモードで実行し、かつ対象サーバがknown_hostsに含まれていない時は、 Are you sure you want to continue connecting (yes/no/[fingerprint])? のメッセージが出ることなく認証失敗となってしまう

対策

「実行前に、サーバへ一旦接続してknown_hostsに入れておいてください」で済めばいいのですが、今回はそれでは難しかったので、スクリプトの引数によってテストモード実行ができるようにしました。

コード

引数によってテストモードに振り分ける部分

スクリプト冒頭部
# パラメータ取得
while getopts tl: OPT
do
	case $OPT in
		"t" ) IS_TEST_MODE="TRUE" ;;
	esac
done

# -tパラメタ 他のパラメタを無視して接続テストをする
if [[ "$IS_TEST_MODE" = 'TRUE' ]]; then
	communicationTestMain
	exit
fi

接続テスト部分
テストという体ですが、やりたいことはknown_hostsへの追加です。

接続テスト実施部分
# -------------------------
# 接続テスト全体
# -------------------------
communicationTestMain() {
    
    cmd_sftp_server1='sftp -v -oPort=22 -i /home/user/.ssh/id_rsa user@192.168.0.21'
    cmd_sftp_server2='sftp -v -oPort=22 -i /home/user/.ssh/id_rsa user@192.168.0.22'

	echo "--------------------------------------------"
	communicationTestOne "$cmd_sftp_server1" 'サーバー1'
	echo "--------------------------------------------"
	communicationTestOne "$cmd_sftp_server2" 'サーバー2'
	echo "--------------------------------------------"
	echo "接続テスト完了です。すべて接続成功であれば後続作業を行えます。"
	echo "成功しなかった環境がある場合、後続作業は行えません。個別に調査してください。"
	echo "--------------------------------------------"
}

# -------------------------
# 接続テスト個別
# $1=接続コマンド
# $2=サーバ名
# -------------------------
communicationTestOne() {
	echo "$2サーバへの接続テストを行います。"
	echo "接続するかどうかというメッセージが出たら、yesあるいはその旨の選択肢で答えてください。"
	echo "「sftp> 」が出たら接続成功です。exitと入力して、sftpを終了してください。"
	echo "「sftp> 」が出ない場合は失敗です。"
	read -p "上記を確認して準備ができたら、enterを押してください。"
	eval $1
	read -p "$2サーバへの接続テスト完了です。成功か失敗かを確認したら、enterを押してください。"
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?