[英]Expect script not sending commands after successful ssh login
啟動以下腳本時,ssh登錄成功,並且我可以進行交互,但是它不發送cd folder
命令。 如果我確定這是我要發送的第一個命令,那么我expect "$"
命令是否很有用?如何發送cd folder
命令?
這是短期期望腳本:
#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no host@exemple.com
expect "password"
send "mypassword\r"
expect "$"
send "cd folder\r"
interact
謝謝!
您需要expect
更具體的shell提示。
根據預期的手冊:
請注意,在許多編輯器中,
^
和$
匹配行的開頭和結尾。 但是,由於Expect 不是面向行的 ,因此這些字符匹配當前在Expect匹配緩沖區 中的數據的開頭和結尾 (與行相對)。
你應該使用創建的SSH密鑰ssh-keygen
(或像這樣 ),並要求服務器管理員將公鑰添加到~/.ssh/authorized_keys
的服務器上。 然后,您無需指定密碼即可登錄到遠程計算機。 否則,任何對腳本具有讀權限的人都可以代表您訪問遠程服務器! 關於這個問題有很好的討論 。
使用配置的鍵,您可以簡單地
ssh user@exemple.com -- 'cd folder; # whatever'
或者,使用here文檔的語法:
#!/bin/bash -
ssh -tt user@host <<'EOC'
cd folder
# do something else
exit
EOC
注意,第一個-t
選項強制偽終端分配。 即使ssh
沒有本地tty ,多-t
選項也會強制tty分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.