ShellでSSHコマンドを利用する注意点

shell ssh Shell

Shellでsshコマンドを利用するとき、パスワードを入力せず、利用できる方法を紹介します。

パスワード認証

パスワードで認証を行う場合、複数の方法が存在します。

sshpassコマンドで接続

# sshpassインストール
yum install -y sshpass
# 接続
sshpass -p '123456' ssh -o StrictHostKeyChecking=no hoge@host.example.com
 

expectコマンドで接続

使用例は以下のようになりますが、詳細内容はグーグルでexpectコマンドを検索してください。

ssh.ctl
#!/usr/bin/expect

log_file /var/log/expect.log

set RemoteHost [lindex $argv 0]
set PW [lindex $argv 1]
set Prompt "\[#$%>\]"

set timeout 5

spawn env LANG=C /usr/bin/ssh ${RemoteHost}
expect {
    -glob "(yes/no)?" {
        send "yes\n"
        exp_continue
    }
    -glob "password:" {
        send -- "${PW}\n"
    }
}

expect {
    -glob "${Prompt}" {
        interact
        exit 0
    }
}

環境変数 SSH_ASKPASS

#!/bin/bash

# 接続先情報
SSH_USER=test
SSH_PASS=mypass
SSH_HOST=your_ssh_server
REMOTE_CMD=”ls -al”

# 後述のSSH_ASKPASSで設定したプログラム(本ファイル自身)が返す内容
if [ -n “$PASSWORD” ]; then
cat <<< “$PASSWORD”
exit 0
fi

# SSH_ASKPASSで呼ばれるシェルにパスワードを渡すために変数を設定
export PASSWORD=$SSH_PASS

# SSH_ASKPASSに本ファイルを設定
export SSH_ASKPASS=$0
# ダミーを設定
export DISPLAY=dummy:0

# SSH接続 & リモートコマンド実行
exec setsid ssh $SSH_USER@$SSH_HOST $REMOTE_CMD

公開鍵認証

 

# クライアントPCで鍵を作る
ssh-keygen -t rsa -b 4096

# リモートへ公開鍵を転送する
ssh-copy-id -i ~/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]

# リモートにSSHで接続する
ssh -i id_rsa [リモートユーザー]@[リモートサーバーのホスト名]

タイトルとURLをコピーしました