[英]why executing a command with ssh works, but assigning it to a var doesn't work?
[英]Executing a command on remote via ssh doesn't work
我正在嘗試使用ssh在遠程服務器上執行命令。 命令是
ssh machine -l user "ls"
這個命令卡在兩者之間,最后我們必須暫停它。
但是,執行命令ssh machine -l user
工作正常,這個命令使我們連接到遠程機器。
有人可以幫助解決為什么遠程服務器上的ls無法通過ssh工作的根本原因。
編輯1:這是使用-v開關和SSH后的輸出
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: ls
打印Sending command: ls
終端卡住了。
我懷疑發生了兩件事之一。 首先,可以將ssh服務器設置為為用戶啟動特定命令,而不管您要求運行什么命令。 例如,如果用戶被限制為以通常的方式運行SFTP,則會看到此行為。 有兩種方法可以設置:
檢查這個的最簡單方法是登錄到遠程服務器並檢查這兩個文件。 或者,您可以啟動其中一個ssh會話,讓它掛起,然后在遠程服務器上運行“ps”以查看正在為相關用戶運行的實際進程。
另一種可能性是遠程用戶在他的.bashrc或其他shell啟動腳本中有一行,它引入了等待或者等待你輸入內容。 同樣,您應該啟動其中一個ssh會話,讓它掛起,然后在遠程服務器上運行“ps”以查看為用戶運行的實際進程。
問題:問題是在命令行上還是在腳本中出現? 你被提示你的passowrd? 有沒有輸出? 如果是,請在此處發布。
並嘗試
ssh -v user@host "ls"
要么
ssh -v -l user host "ls"
你會得到額外的輸出。 您可以使用-v選項最多3次以獲得更高的詳細程度。
ssh -vvvl user host "ls"
編輯:
如果我必須調試這個,我會做以下事情:
這是一個不尋常的事情,但'ls'不一定是你所期望的。 在目標計算機的命令行上,嘗試
which ls
然后使用帶有ssh調用的完全限定名稱的輸出,例如:
ssh machine -l user "/bin/ls"
請記住,當通過ssh激活命令時,您不會自動擁有與常規登錄相同的路徑。
最后,檢查目標計算機上的日志文件。 它們通常位於/ var / log下(至少在debian下)。
EDIT2:
在linux機器上,我有時遇到'ls'命令掛起而沒有任何輸出的問題。 當目錄中的文件系統以某種方式“無效”時,就會發生這種情況。 例如,如果有一個無效的安裝android mtpfs,那么ls命令無法處理並掛起。
所以試着'ls'一個不同的目錄,例如
ssh host -l user "ls /tmp"
如果這樣可行,則從命令行檢查是否存在某個目錄或文件,其中某些無效狀態會導致ls命令失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.