2012-11-08 6 views
6

この質問は何度か聞かれましたが、私の検索ではどこでも関連する回答は見つかりませんでした。パスワードを入力せずに、キーを使用せずにSSHを実行するスクリプト

セキュリティが問題ではなく、思考が数秒間あれば誰でもパスワードを推測できる開発環境で働いています。

私がやっていることは簡単です。ローカルの.bashrcファイルでエイリアス関数を作成しました。この関数がデフォルトのパスワードでマシンに自動的にログインするようにしたいと思います。私はそれを実行すると

function s() { 
ssh [email protected]$1 
} 

は、私はこのような何かを得る:

~]s 122 

ssh [email protected] 

[email protected]'s password: 

はバッシュを使用して、なくRSAキーを使用して、私はこれを取得したいと思い

私の現在の実装では、次のようになりますデフォルトのパスワード「パスワード」を使用します。

IPとユーザーが既に設定されている場合は、次のように試しました。私は、マシンを接続することができる午前、次のコマンドを使用して

Connecting and logging into server using expect 
usage: send [args] string 
    while executing 
"send" 
    invoked from within 
"expect "assword" send "password"" 
[email protected]'s password: 
bash: spawn: command not found... 

Do=$(expect -c " 
spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"") 
echo $Do 
$Do 

それはfollwingエラーが発生します。対話を削除すると、uptimeコマンドが実行され、接続が閉じられます。対話コマンドでは、私が入力しているものを見たり、実際にマシンと対話することができません。何か案は?

Do=$(expect -c "spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do; 
+0

SPAWNコマンドは環境を設定していますか?そうでなければ、パスは設定されず、 'ssh'を探す場所がわかりません。実行可能ファイルに完全なパスを入れてみてください。 – Jay

+0

RSAキーの嫌悪感は何ですか?新しいシステムをセットアップするときに私が最初にやることは、RSAキーを承認することです。 – mpontillo

+0

私は非常に限られた生涯しかない多くの異なるサーバで作業しているので、私はRSA鍵で作業したくありませんでした。このスクリプトは多くの人々によって使用される予定です。毎回同じパスワードを入力してください。 ssh-copy-idに新しいマシンを初めて訪れるたびにパスワードを入力しなければならない場合、そのキーはその目的を破ります。 – SuperTetelman

答えて

7

あなたはexpectツールでこれを行うことができます。http://expect.sourceforge.net/

それは広く利用可能ですので、お使いのシステムに応じて、sudo apt-get install expectまたはyum install expectの同等がそれをインストールします。

次に、expectのsshを使用したスクリプトの例を示します。これは、あなたがにログインすると、あなたに対話プロンプトのコントロールを提供します:

#!/usr/bin/expect 

set login "root" 
set addr "127.0.0.1" 
set pw "password" 

spawn ssh [email protected]$addr 
expect "[email protected]$addr\'s password:" 
send "$pw\r" 
expect "#" 
send "cd /developer\r" 
interact 

ここではbashスクリプトの一部としてexpectを使用する方法の例です。これはsshでログインし、/ varにcdしてスクリプトを実行し、sshセッションを終了します。

#!/bin/bash 
... 

login_via_ssh_and_do_stuff() { 

    # build the expect script in bash 

    expect_sh=$(expect -c " 
    spawn ssh [email protected] 
    expect \"password:\" 
    send \"password\r\" 
    expect \"#\" 
    send \"cd /var\r\" 
    expect \"#\" 
    send \"chmod +x my_script.sh\r\" 
    expect \"#\" 
    send \"./my_script.sh\r\" 
    expect \"#\" 
    send \"exit\r\" 
    ") 

    # run the expect script 
    echo "$expect_sh" 
} 

これらのスニペットをローカルシステムのスクリプトに残して、スクリプトに別名を付けることができます。

また、セキュリティは問題ではないと私は知っていますが、パスワードを使わずにsshに「適切な」方法はsshキーペア=を使用することです。

+0

@Kevin:否定的:http://www.pantz.org/software/expect/expect_examples_and_tips.html –

+1

私はexpectスクリプトに\ nと\ rの両方を使用しました。 1つは他の人よりも推奨されていますか? – SuperTetelman

4

を使用してください。これは、主要なLinux-esのパッケージリポジトリにあります。パスワードはpassword.txtファイル内にあるとき、例えば

は、:

sshpass -fpassword.txt ssh [email protected] 

sshpass runs ssh in a dedicated tty , fooling it into thinking it is getting the password from an interactive user.

関連する問題