0
我的服務器運行Windows 7 with freeSSHd以允許ssh連接。我試圖使用paramiko遠程執行該服務器上的程序MyProgram.exe。這是執行其工作的代碼的相關部分。不過,它需要改進。如何防止paramiko打開新的cmd窗口
import paramiko
import time
cmds = 'xcopy file1 backup\\file1 & xcopy file2 backup\\file2 & MyProgram.exe file1 file2'
final_cmds = 'cmd.exe /c "' + final_cmds + '"'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ipaddr = socket.gethostbyname(hostname)
ssh.connect(ipaddr, port=port, username=username, password=password)
transport = ssh.get_transport()
channel = transport.open_session()
channel.setblocking(1)
channel.settimeout(None)
channel.set_combine_stderr(1)
channel.exec_command(final_cmds)
while True:
try:
if channel.exit_status_ready():
if channel.recv_ready():
output = channel.recv(1024)
break
except:
print 'Exception'
break
time.sleep(2)
ssh.close()
上述代碼的問題在於它會在服務器端打開一個新的cmd窗口。我想在後臺運行cmd.exe的或至少是最小化,但如果我更改線路
final_cmds = 'cmd.exe /c "' + final_cmds + '"'
到
final_cmds = 'start /b cmd.exe /c "' + final_cmds + '"'
或
final_cmds = 'start /min cmd.exe /c "' + final_cmds + '"'
甚至
final_cmds = 'start cmd.exe /c "' + final_cmds + '"'
我收到一個錯誤:「無法執行命令或遠程系統上的shell:執行進程失敗。「有任何想法嗎?
感謝
另外,您可以用不同的用戶所登錄,在一個運行sshd服務。 這樣它就不會打開任何窗口。 Linux中的一種常見做法是爲每個服務提供一個用戶,如果您可以自由創建用戶,則具有通過SSH連接更輕鬆地審覈活動的額外優勢。 – Txangel 2013-05-10 08:49:56
謝謝,這兩種方法確實工作得很好。我決定第二個,因爲在我的情況下它看起來更優雅。 – pegazik 2013-05-11 20:27:50