Linux

ssh 到伺服器並自動執行 sudo 命令並保持外殼打開

  • February 7, 2018

我想alias在我的本地機器上使用儲存在我本地機器上的密碼ssh執行目標系統,sudo但在遠端系統上保持外殼打開。原因是我很懶,每次登錄伺服器時都不想輸入很長的密碼。我知道這不是最安全的做法。

現在,如果我執行以下操作,它可以工作:

ssh -q -t $1 "echo $mypword|base64 -d|sudo -S ls; bash -l"

$1是遠端系統的主機名。mypword 是儲存在本地系統上的編碼密碼。這有效並讓我的外殼打開。然後我可以用 sudo 做任何事情,因為它現在已經為那個 shell 記憶體了。

我遇到的問題是,如果您為我的帳戶執行 ps 和 grep,您將在程序列表中看到包含密碼的編碼字元串。不能這樣。有沒有辦法在程序列表中不顯示密碼的情況下完成此操作?

我試過了:

echo $mypword|ssh -q -t $1 "base64 -d|sudo -S ls -l /root;bash -l"

ls熄滅,但外殼不保持打開狀態。

通常這可以用expect. 您可以獲取它以從環境中檢索密碼,將其傳遞給base64並恢復輸出。然後生成 ssh,等待$shell 的提示,然後向它發送sudo命令。當看到來自 sudo 的密碼提示時,發送解碼後的密碼,然後用interact. 將以下內容放入文件中並使其可執行,然後使用您的主機名作為參數呼叫它。

#!/usr/bin/expect -f
# https://unix.stackexchange.com/a/422651/119298
log_user 0
spawn base64 -d
send $env(mypword)\n\x04
expect -nobrace -re "\n(.+)$"
close
set output $expect_out(1,string)

spawn ssh -q -t [lindex $argv 0] 
expect {$ }
send "sudo echo hi\n"
expect -nobrace -re {.sudo. password.*:}
send "$output\n"
expect "\n"
interact

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