paramiko SSH代理登录 ,没有目标服务器密码
时间: 2024-03-20 10:40:04 浏览: 15
如果没有目标服务器的密码,可以使用 Paramiko 库中的密钥认证方式来登录目标服务器,具体步骤如下:
1. 导入 Paramiko 库
```
import paramiko
```
2. 创建 SSH 代理对象
```
proxy = paramiko.ProxyCommand("ssh -q -W %h:%p <user>@<proxy_host>")
```
其中,`<user>` 和 `<proxy_host>` 分别是代理服务器的登录用户名和 IP 地址。
3. 创建 SSH 客户端对象
```
ssh = paramiko.SSHClient()
```
4. 设置 SSH 客户端的策略,允许连接未知的主机
```
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
```
5. 使用 Paramiko 库中的密钥认证方式连接目标服务器
```
key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect(hostname='hostname', port=22, username='username', pkey=key, sock=proxy)
```
其中,`/path/to/private/key` 是本地私钥文件的路径,`username` 是登录目标服务器所用的用户名。
需要注意的是,使用密钥认证方式时,不需要输入密码,但需要先将本地私钥文件上传到目标服务器上,并将公钥添加到目标服务器的 `authorized_keys` 文件中。
6. 执行命令
连接成功后,就可以执行相关的命令了,比如:
```
stdin, stdout, stderr = ssh.exec_command('ls')
```
该命令会在目标服务器上执行 `ls` 命令,并返回命令的输出结果。
7. 关闭连接
在使用完 SSH 客户端后,应该关闭连接以释放资源:
```
ssh.close()
```
需要注意的是,在执行命令时可能会出现一些特殊字符,可以使用 Python 的字符串转义来处理。