Poo*_*Poo 4 python python-2.7 python-3.x
为了访问远程主机,我们需要登录jumphost1,然后登录jumphost2。为此,我们尝试创建一个隧道,如下面的 python 脚本所示。
我此连接的主要目的是执行脚本脚本并将输出重定向到脚本所在的同一位置脚本位置是本地计算机,pyc 文件将在本地计算机中创建隧道并连接远程计算机。
添加信息:两个跳转主机均通过密码启用 sshkeygen。所以它会询问密码。
[root@centseven ~]# cat pyc
import paramiko
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
('1.5.18.1', 22),
ssh_username='user',
ssh_pkey="/root/.ssh/id_rsa",
ssh_private_key_password="userpass",
remote_bind_address=("1.15.18.1", 22),
local_bind_address=('127.0.0.1', 1111)
) as tunnel:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=127.0.0.1, port=1111, username=root, password=remotepass)
# do some operations with client session
stdin, stdout, stderr = client.exec_command("./script >> output.txt")
print stdout.channel.recv_exit_status() # status is 0
client.close()
print('FINISH!')
Run Code Online (Sandbox Code Playgroud)
建议更改的当前错误,它现在要求我输入密码,输入密码时出现以下错误
# python pyc
Enter passphrase for key '/root/.ssh/id_rsa':
2017-05-14 23:44:34,322| ERROR | Secsh channel 0 open FAILED: open failed: Administratively prohibited
2017-05-14 23:44:34,337| ERROR | Could not establish connection from ('127.0.0.1', 1111) to remote side of the tunnel
2017-05-14 23:44:34,338| ERROR | Exception: Error reading SSH protocol banner
2017-05-14 23:44:34,339| ERROR | Traceback (most recent call last):
2017-05-14 23:44:34,339| ERROR | File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/transport.py", line 1740, in run
2017-05-14 23:44:34,339| ERROR | self._check_banner()
2017-05-14 23:44:34,339| ERROR | File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/transport.py", line 1888, in _check_banner
2017-05-14 23:44:34,340| ERROR | raise SSHException('Error reading SSH protocol banner' + str(e))
2017-05-14 23:44:34,340| ERROR | SSHException: Error reading SSH protocol banner
2017-05-14 23:44:34,340| ERROR |
Traceback (most recent call last):
File "pyc", line 16, in <module>
client.connect(hostname="127.0.0.1",port=1111,username="root",password="nasadmin")
File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/client.py", line 338, in connect
t.start_client()
File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/transport.py", line 493, in start_client
raise e
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
Run Code Online (Sandbox Code Playgroud)
编辑1
python stack.py
Enter passphrase for key '/root/.ssh/id_rsa': 2017-05-15 00:14:24,437| ERROR | Exception: Error reading SSH protocol banner
2017-05-15 00:14:24,439| ERROR | Traceback (most recent call last):
2017-05-15 00:14:24,439| ERROR | File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/transport.py", line 1740, in run
2017-05-15 00:14:24,440| ERROR | self._check_banner()
2017-05-15 00:14:24,440| ERROR | File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/paramiko/transport.py", line 1888, in _check_banner
2017-05-15 00:14:24,440| ERROR | raise SSHException('Error reading SSH protocol banner' + str(e))
2017-05-15 00:14:24,440| ERROR | SSHException: Error reading SSH protocol banner
2017-05-15 00:14:24,440| ERROR |
2017-05-15 00:14:24,442| ERROR | Could not connect to gateway remotehost:22 : Error reading SSH protocol banner
Traceback (most recent call last):
File "stack.py", line 9, in <module>
remote_bind_address=("remotehost", 22)
File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/sshtunnel.py", line 1482, in __enter__
self.start()
File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/sshtunnel.py", line 1224, in start
reason='Could not establish session to SSH gateway')
File "/root/.pyenv/versions/ansible2/lib/python2.7/site-packages/sshtunnel.py", line 1036, in _raise
raise exception(reason)
sshtunnel.BaseSSHTunnelForwarderError: Could not establish session to SSH gateway
Run Code Online (Sandbox Code Playgroud)
.ssh/配置
## lo8
Host jump1-*
User user
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
ServerAliveInterval 60
ServerAliveCountMax 12
Host jump01-temporary
Hostname HostIP
Port 2222
Host jump02
Hostname HostIP
Port 2222
Host jump01
Hostname HostIP
Port 22
ProxyCommand ssh -W %h:%p jump01
Host jump02
Hostname HostIP
Port 22
ProxyCommand ssh -W %h:%p jump02
Host Remote host
Hotname HostIP
Run Code Online (Sandbox Code Playgroud)
有2个跳转服务器,我们需要连接本地机器 --> JUMP1 --> Jump2 --> Remte Host
对于Exception:\n更改
\n client.connect(hostname=127.0.0.1, port=1111, username=root, password=nasadmin)
\n至
\nclient.connect(hostname="127.0.0.1",port=1111,username="root",password="nasadmin")
它们是string,而不是variable\xe3\x80\x82
使用默认 ssh 设置修复后更新centos6.9\n您的代码测试正常,然后我认为这是系统 ssh 错误的问题:administratively prohibited当我设置AllowTcpForwarding no并 重新启动 sshd 时,错误出现/etc/ssh/sshd_configremote_bind_address
2017-05-17 16:11:09,475| ERROR | Secsh channel 0 open FAILED: open failed: Administratively prohibited\n2017-05-17 16:11:09,478| ERROR | Could not establish connection from (\'127.0.0.1\', 3333) to remote side of the tunnel\n2017-05-17 16:11:09,479| ERROR | Exception: Error reading SSH protocol banner\n2017-05-17 16:11:09,481| ERROR | Traceback (most recent call last):\n2017-05-17 16:11:09,481| ERROR | File "/usr/lib/python2.7/dist-packages/paramiko/transport.py", line 1723, in run\n2017-05-17 16:11:09,481| ERROR | self._check_banner()\n2017-05-17 16:11:09,481| ERROR | File "/usr/lib/python2.7/dist-packages/paramiko/transport.py", line 1871, in _check_banner\n2017-05-17 16:11:09,482| ERROR | raise SSHException(\'Error reading SSH protocol banner\' + str(e))\n2017-05-17 16:11:09,482| ERROR | SSHException: Error reading SSH protocol banner\n2017-05-17 16:11:09,482| ERROR | \nRun Code Online (Sandbox Code Playgroud)\n\n更多详细信息请参阅ssh-tunneling-error-channel-1-open-failed-administratively-prohibited-open
\n祝你好运!
小智 5
尝试这个 :
import paramiko
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
('1.5.18.1', 22),
ssh_username='user',
ssh_pkey="/root/.ssh/id_rsa",
ssh_private_key_password="userpass",
remote_bind_address=("1.15.18.1", 22)
) as tunnel:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=tunnel.local_bind_host, port=tunnel.local_bind_port, username="root", password="remotepass")
# do some operations with client session
stdin, stdout, stderr = client.exec_command("./script >> output.txt")
print stdout.channel.recv_exit_status() # status is 0
client.close()
print('FINISH!')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13177 次 |
| 最近记录: |