web-dev-qa-db-ja.com

sshサーバーにログインするためのシェルスクリプト

スクリプトに記載されているパスワードを使用してsshサーバーに自動ログインできるシェルスクリプトを作成してみました。私は次のコードを書きました:

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

このコードは正しく実行されていませんが、パスワードを要求しています。誰かがこれを解決するのを助けてくれますか

29
pradeepchhetri

私はかつてsshサーバーにログインするためにexpectスクリプトを書いて(あなたのケースのように)、私のスクリプトは次のようなものでした:

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

多分interactがあなたのスクリプトに欠けていると思います。

38
saeedn

あなたはそれを間違った方向に進んでいます。やりたいことは、パスワードなしのssh-keyペアを生成し、(サーバーがRSAキー認証をサポートしている限り)すべてのユーザーに対してパスワードを入力しなくてもアクセスできるようにすることです。これは、秘密鍵が盗まれる可能性のある場所に保管されている場合のセキュリティ上のリスクです。

次の手順を実行します:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. 押す Return パスフレーズの入力を求められたとき
  5. 押す Return もう一度確認します。

これで、~/.sshディレクトリにmysshkey.pubmysshkeyの2つのファイルができます。 mysshkey.pubは公開鍵です。これはリモートサーバーに配置しても安全です。 mysshkeyはパスワードなしの秘密鍵です。リモートサーバー(または他の誰かがコピーを取得できる場所)に置くのは安全ではありません

SSHで接続したいサーバーで:

  1. リモートサーバーにログインします
  2. mkdir -p ~/.ssh
  3. mysshkey.pubの内容をコピーして~/.ssh/authorized_keysに貼り付けます
  4. ~/.ssh/authorized_keyschmod600であることを確認してください

次に、ローカルマシンで実行するには、次のコマンドを実行します。

ssh -i ~/.ssh/mysshkey <remote_server_ip>

そして、パスワードの入力を求められることなくログインします。

これは、パスワードを変更した場合に更新が必要な複数の場所にパスワードをハードコーディングする必要がないため、自動ログインを管理するのに非常に好ましい方法です。

32

Debianベースのディストリビューションでは、sshpassパッケージを使用すると、目的の操作を簡単に実行できます。パッケージは他の多くの人気のあるディストリビューションで利用可能です。最初に設定する必要があります:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

次に、次のようなスクリプトからSSHコマンドを呼び出します。

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

これにより、expectを使用するソリューションよりも、異なるロケールを使用している場合やパスワードを変更する必要がある場合などの柔軟性が向上します。

20
likeitlikeit

最初にsshPassをインストールしますSudo apt-get install sshpass

次に、.bashrcファイルに次のようにエイリアスを作成します。

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_Host'

変更した.bashrcファイルをsource ~/.bashrcでリロードします

これで完了です。

これで、ターミナルで上記で作成したエイリアスsshLoginを使用してsshを実行できます。

7
bpathak

あなたはこれを使うことができます:

sshpass -p 'yourpassword'  ssh user@ip

ハッシュキーを作成してPCに保存するために必要なものすべて

入力するだけ

ssh-keygen -t rsa -b 4096 # just press Enter till the end

次に入る

ssh-copy-id <user>@<server>

次に通常使用してログインします

ssh <user>@<server>

今、あなたはパスワードを必要としません

注:パスワードをプレーンテキストで保存すると危険です

この方法は、非常に安全な長さ4096の公開鍵でRSAを使用してパスワードのハッシュ値を作成します。

2

5つの簡単なステップでSSH Keygenを使用したSSHパスワードなしログイン

環境設定: enter image description here

ステップ1:認証SSH-Kegen Keys on –(192.168.0.12)
最初にユーザーでサーバー192.168.0.12にログインし、次のコマンドを使用して公開鍵のペアを生成します。

enter image description here

ステップ2:– 192.168.0.11に.sshディレクトリを作成します
次のコマンドを使用して、サーバー192.168.0.12からSSHを使用してサーバー192.168.0.11に接続し、その下に.sshディレクトリを作成します。

enter image description here

ステップ3:生成された公開鍵を– 192.168.0.11にアップロードします
サーバー192.168.0.12からのSSHを使用し、サーバー192.168.0.11のユーザーの.sshディレクトリの下に新しい生成された公開鍵(id_rsa.pub)をファイル名authorized_keysとしてアップロードします。

enter image description here

ステップ4:権限を192.168.0.11に設定します
サーバーのSSHバージョンが異なるため、.sshディレクトリとauthorized_keysファイルに権限を設定する必要があります。

enter image description here

ステップ5:192.168.0.12から192.168.0.11サーバーへのパスワードなしのログイン
これ以降、パスワードのないtecmintユーザーとしてサーバー192.168.0.12からsheenaユーザーとして192.168.0.11にログインできます。

enter image description here

1
Premraj

他の回答で既に説明したように、私はsshpassも使用していますが、これをreadコマンドと組み合わせて、一時的な環境変数にパスワードを保存します。このように私のパスワードはどこにも平文で書かれることはありません。ここに私が使用する1行のコマンドがあります:

read -s PASS; sshpass -p $PASS ssh <user>@<Host adress>

その後、パスワードを入力する必要があり(画面には何も表示されません)、Enterキーを押すと接続が開きます。

1
StormRider

最初の引数はホスト名で、2番目はパスワードです。

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set Host [lindex $argv 0]
     spawn ssh -t root@$Host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

実行:./script.expect

0
Shivam Mehrotra

私は最近これを行いました、これはあなたを助けるかもしれません:

sshpass -p 'password' username@ipaddress

これが機能しない場合は、接続する他のマシンでキーを生成する必要があります

ssh-keygen

秘密鍵と公開鍵を生成して場所を尋ねます。空のままにすると、デフォルトで.sshフォルダーに鍵が保存されます。パスフレーズを要求されます。空のままにして、.sshフォルダーに移動して、 「authorized_keys」への公開鍵名

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

これにより、リストにユーザーが追加され、ホームディレクトリに移動して権限が付与され、sshdサービスが再起動されます

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
Sudo service sshd restart

ここで、sshコマンドを実行する場所から、その場所にあるシステムに秘密鍵を移動する必要があります。次に、

sshpass -p 'password' ssh -i id_rsa username@ip

それでも機能しない場合は、/ etc/sshに移動し、vimエディターでsshd_configを開いて、pubkeyAuthenticatoinがyesになっているかどうかを確認します。yesに変更していない場合は、sshdサービスを再起動して試してみてください。正しく機能します。 。

0
Utkarsh Gupta