有一個叫做sshuttle可以連接到服務器并創建隧道的程式。
我希望按順序創建一個 bash 函式:
-
- 打開通往遠程服務器的隧道 (
sshuttle -r myhost 0/0),
- 打開通往遠程服務器的隧道 (
-
- 執行 1 個任意命令列,
-
kill -s TERM <pidOfTheAboveTunnel>.
一個基本的想法(可行,但 5 秒的延遲是個問題)就像sshuttle -r myhost 0/0 & ; sleep 5 ; mycommand ; kill -s TERM $(pgrep sshuttle)
expect可用于期望字串“c : Connected to server. ” 這是從 stderr 這里收到的?作為一個新手,我的嘗試都以失敗告終,而且手冊頁令人印象深刻。
uj5u.com熱心網友回復:
當您expect用來控制另一個程式時,它通過偽終端 (pty) 連接到該程式,因此期望看到程式的輸出與您在終端上看到的相同,特別是 stdout 和 stderr 之間沒有區別。假設您mycommand要在本地機器上執行,您可以使用類似這樣的內容作為期望(而不是 bash)腳本:
#!/usr/bin/expect
spawn sshuttle -r myhost 0/0
expect "Connected to server."
exec mycommand
exec kill [exp_pid]
close
exec kill如果 sshuttle 在其標準輸入關閉時退出,則可能不需要,這將在下一行發生。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440731.html
