Ssh

用於登錄 ssh 伺服器的 Shell 腳本

  • September 14, 2020

我嘗試編寫一個 shell 腳本,它可以使用腳本中提到的密碼自動登錄到 ssh 伺服器。我寫了以下程式碼:

set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect 
{
  "root@172.31.72.103's password" 
  {
     send "password\r" 
  }
}

此程式碼執行不正常,仍然要求輸入密碼。有人可以幫我解決這個問題嗎

我曾經寫過一個expect腳本來登錄 ssh 伺服器(就像你的情況一樣),我的腳本是這樣的:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact

我認為interact您的腳本中可能缺少 。

你的做法是錯誤的。您要做的是生成一個無密碼的 ssh 密鑰對,然後(只要伺服器支持 RSA 密鑰身份驗證)您無需為所有人輸入密碼即可進入。如果您的私鑰儲存在可能被盜的地方,這將帶來安全風險。

按著這些次序:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Return提示輸入密碼時按
  5. 再按Return一次確認。

現在您的~/.ssh目錄中將有兩個文件,mysshkey.pub並且mysshkey. mysshkey.pub是您的公鑰,這個可以安全地放在遠端伺服器上。mysshkey是您的私人無密碼密鑰,放在遠端伺服器上(或其他人可以獲得副本的地方)是不安全的*。*

在您希望通過 SSH 連接的伺服器上:

  1. 登錄到遠端伺服器
  2. mkdir -p ~/.ssh
  3. 將內容複製並粘貼mysshkey.pub~/.ssh/authorized_keys
  4. 確保這~/.ssh/authorized_keyschmod’d to600

現在,要在本地機器上執行它,請執行以下命令:

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

並且您將在不提示輸入密碼的情況下登錄。

這是管理自動登錄的一種更可取的方法,因為您最終不會在多個地方硬編碼密碼,如果您更改密碼則需要更新這些地方。

引用自:https://unix.stackexchange.com/questions/31071