SSHダブルログインスクリプト

SSHダブルログインスクリプト

スクリプトを使用して2回ログインする必要がありますが、ssh機能しません。私のスクリプトファイルの内容は次のとおりです。

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
spawn ssh $addr2
expect "$login@$addr\'s password:"
send "$pw\r"
interact

しかし、これはエラーのため失敗します。

user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
send: spawn id exp7 not open
    while executing
"send "$pw\r""

行を変更するとエラーで失敗しますspawn ssh $addr2exec ssh $addr2

user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
    while executing
"exec ssh $addr2"

これを行うには何を変更する必要がありますか?

答え1

この問題の解決策を見つけた後、私の答えを投稿しました。実際に動作するスクリプトは次のとおりです。

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
send "ssh $addr2\r"
expect "$login@$addr\'s password:"
send "$pw\r"
interact

spawn ssh $addr2だから基本的に行をsend "ssh $addr2\r"。最初にSSHを接続したホストで別のSSHを起動するのではなく、開始した場所から別のSSHを作成しようとしています。

答え2

ssh指定したホスト名を解決できず、エラーが発生しました。その後、Expectにパスワードを送信するように指示しますが、sshでエラーが発生して終了するため、送信する内容はありません。したがって、指定したホスト名を解決できないため、確認する必要があります。または、IPアドレスに切り替えることもできます。しかし、「address2」が誰であるかわからない理由を見つけるのが良いでしょう。

答え3

SSL 鍵生成を探します。鍵ペア(公開および秘密)を生成し、生成された秘密鍵をシステムに保管し、SSHアクセスを必要とするシステムに公開鍵を配置します。これにより、sshはパスワードの入力を求めず、これを期待する必要はありません。

これは、異なるシステムに対して異なるキーペアを生成できるようにキーを生成するために使用する "sskkeygen.sh"スクリプトです。

#!/bin/bash
SYSTEM=${1:-boogie}
COMMENT=${2:-"Key for $SYSTEM work"}
ssh-keygen -t dsa -f ~/.ssh/id_dsa.$SYSTEM -C "$COMMENT"
chmod 600 ~/.ssh/id_dsa.$SYSTEM
chmod 600 ~/.ssh/id_dsa.$SYSTEM.pub

~/.ssh/id_dsa.$SYSTEM.pub キーをリモートシステムにコピーします。 注意してください。手順にはすべてキーファイルをコピーするように指示されていますが、添付したいと思います!

次に、どのホストがどのキーを使用しているかを知らせるには、~/.ssh/config ファイルが必要です。

#key: prod
Host 1.2.3.4
  IdentityFile ~/.ssh/id_dsa.prod
  User meself

#key: dev/test
Host 2.3.1.4
  IdentityFile ~/.ssh/id_dsa.dev
  User meself

#key: ftp dropbox
Host dropbox.company.com
  IdentityFile ~/.ssh/id_dsa.dropbox
  User virtualuser

#key: ftp thing
Host aaa.bbb.thing.com
  IdentityFile ~/.ssh/id_dsa.think
  User neato

#key: work
Host *.work.com
  IdentityFile ~/.ssh/id_dsa.work
  User workid

関連情報