1 回答

TA貢獻1827條經驗 獲得超8個贊
您的 SSH 命令包含無效參數:ProxyCommand是一個選項,因此需要在它前面加上-o,與ConnectTimeout(并且,正如 Charles Duffy 所指出的,需要刪除該選項字符串內的冗余引號,因為該命令不會傳遞給殼):
server_command = 'screen -dmS TEST /bin/bash --login -c \'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log\''
command = ['ssh', '-o', 'ConnectTimeout=3', '-o', 'ProxyCommand=ssh -q -W %h:%p bastion.host.com', 'host.com', server_command]
一般來說,當您的命令行包含空格和/或引號并傳遞給另一個命令時,可能需要對它進行 shell 引用。Python 函數shlex.quote可以自動執行此操作。screen在您的情況下,這是沒有必要的,因為您(正確地)手動引用了您傳遞給inside 的命令server_command?;蛘撸部梢跃帉懸韵聝热荩?/p>
script_command = 'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log'
server_command = f'screen -dmS TEST /bin/bash --login -c {shlex.quote(script_command)}'
— 請注意 shell 命令行內沒有手動引號。相對于手動引用的優點是,這也適用于 shell 引用的嵌套級別,例如,當嵌套命令調用時。
添加回答
舉報