我是python的新手。我需要每天登录服务器(桌面 - > 1.32 - > 0.20 - > 3.26)。为此我需要打开putty并使用ssh连接我正在登录。为了做到这一切,我想用python编写一个脚本。
通过使用谷歌我认为subprocess.Popen会这样做。但它不能正常工作。
第1道:
import subprocess
pid = subprocess.Popen("putty.exe user@xxx.xx.x.32 -pw password").pid
工作正常(打开窗口登录到.32)。但是无法提供意见。我开始知道要为同一个过程提供输入,我们需要使用管道。
第二道:
from subprocess import Popen, PIPE, STDOUT
p = Popen("putty.exe user@xxx.xx.x.32 -pw password", stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'ssh xx.xx.x.20\n')[0]
print(grep_stdout.decode())
通过使用这个我也无法登录第一台服务器。登录到所有服务器后,我需要将终端设置为活动状态。怎么做???
修改
我需要在新的putty窗口中执行此操作。登录后不要关闭窗口。我有一些手工工作要做。
答案 0 :(得分:0)
python:http://www.paramiko.org/有一个SSHv2协议实现。您可以使用pip轻松安装它:
pip install paramiko
然后您可以创建ssh客户端,连接到您的主机并执行命令:
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect('hostname', username='login', password='pwd')
stdin, stdout, stderr = ssh_client.exec_command('command')
答案 1 :(得分:0)
使用paramiko库python 使用 -
建立SSH连接.controller('AccountCtrl', function($scope, wpService){
$scope.wpService = wpService;
}
使用 -
检查连接是否处于活动状态ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,username, password)
ssh.exec_command()基本上是一个会话。使用exec_command(command1; command2)在一个会话中执行多个命令
此外,您可以使用它在单个会话中执行多个命令
status = ssh.get_transport().is_active()
#returns True if connection is alive/active
答案 2 :(得分:0)
使用powershell调用腻子以打开新窗口
from subprocess import Popen
Popen("powershell putty.exe user@host -pw mypassword")
答案 3 :(得分:0)
我在 Windows 上创建了一个 bat 文件,它引用了腻子和腻子会话特定的信息。这个bat文件可以在windows上自己运行。要从 python 调用,我使用了 subprocess.run() -- python 3.5+。
名为 putty.bat 的 bat 文件示例:
start c:\app\PuTTy\putty.exe -load 192.168.1.230-node1-logs -l <logon user> -pw <logon user password for putty session>
分解bat文件:
在 python 中,使用 subprocess.run() 命令。
示例:
import subprocess
...
...
try:
process = subprocess.run(["putty.bat"], check=True, stdout=subprocess.PIPE, universal_newlines=True)
print(process.stdout)
except Exception as e:
print("subprocess call error in open putty command")
print(str(e))
希望这对您有帮助