2つのジャンプホスト/パスワードによる事前自動ログイン

2つのジャンプホスト/パスワードによる事前自動ログイン

リモートコンピュータに自動的にログインする方法を見つける必要があります。いくつかの方法でこれを行うことができますが、これは私にとって少し面倒です。

リモートコンピュータに自動的にログインしてコマンドまたはスクリプトを実行し、出力をローカルシステムファイルにリダイレクトします。

ssh remote-host < ./script >> storageinfo_$date.txt

しかし、難しい部分は、リモートホストに直接接続できないことです。まずJumphost1--> Jumphost2--> に接続し、次に --> に接続する必要があります。remote-host

Jumphostx では sshkeygen が有効になっていますが、パスワードの例は次のとおりです。userpass
リモートホストでは sshkeygen が有効になっていません。例:remotepass

.ssh/config次のようにファイルを使用してこれを行いました。これまではテスト環境で成功しました。ただし、実際の環境ではExpectをインストールしないでください。

# cat .ssh/config

Host jump1-*
    User ldap-user
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host jump1-centos01-temporary 
    Hostname 13.1.2.19
    Port 2222

Host jump1-centos01        
    Hostname 1.2.1.18
    Port 22
    ProxyCommand ssh -W %h:%p jump1-centos01-temporary

Host remote-host
    Hostname 12.1.1.8
    ProxyCommand ssh -W %h:%p jump1-centos01
    User root

予測モードと転送モードを使用したSSH接続

# cat expect.sh 

#!/usr/bin/env expect
set timeout 7
set date [exec date "+%d-%B-%Y"]

spawn sh -c "ssh va1ap-vsns0001n < ./isi.py > storageinfo_$date.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Password:"
send "remotepass\r"
interact

答え1

ssh -t $jump1 ssh -t $jump2 ssh -t $tgt

探しているリンクを取得できます。 ptyが割り当てられていることを確認してください。 ptyは、-tターゲットでコマンドを実行する必要がある場合、通常は割り当てられません。ssh

この場合、プロキシとプロキシの配信は完全に適切に見えるので、次のようになります。

ssh -A -t $jump1 ssh -A -t $jump2 ssh -t $tgt

これがうまくいかない場合は、次の選択肢としてscript使用できます。expect一部状態。たとえば、echo $passwd | script -q -f -c "ssh -q -t $host sudo -p \"''\" \"$some_command\"これは非対話型の目的に必要なパターンです。

ただし、現実的には、特定の種類のキーベース認証またはシングルサインオン(SSO)認証を設定しようとしています。特にテスト環境と本番環境が異なる場合は、説明するワークフローが悪夢のように聞こえます。

関連情報