Ahoj,
chtěl jsem v Pythonu spouštět příkazy na vzdáleném stroji přes ssh.
Například:
#!/usr/bin/python3
import paramiko
server = "*.*.*.*.*"
port = "22"
username = "user"
password = "****"
comand = "ls"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, port, username, password)
stdin, stdout, stderr = ssh.exec_command(comand)
lines = stdout.readlines()
print (lines)
ssh.close()
ale hned jsem narazil na problém:
Exception: key cannot be used for signing
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 2109, in run
handler(self.auth_handler, m)
File "/usr/lib/python3/dist-packages/paramiko/auth_handler.py", line 298, in _parse_service_accept
sig = self.private_key.sign_ssh_data(blob)
File "/usr/lib/python3/dist-packages/paramiko/agent.py", line 418, in sign_ssh_data
raise SSHException("key cannot be used for signing")
paramiko.ssh_exception.SSHException: key cannot be used for signing
Traceback (most recent call last):
File "ssh7.py", line 13, in <module>
ssh.connect(server, port, username, password)
File "/usr/lib/python3/dist-packages/paramiko/client.py", line 435, in connect
self._auth(
File "/usr/lib/python3/dist-packages/paramiko/client.py", line 764, in _auth
raise saved_exception
File "/usr/lib/python3/dist-packages/paramiko/client.py", line 751, in _auth
self._transport.auth_password(username, password)
File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 1498, in auth_password
raise SSHException("No existing session")
paramiko.ssh_exception.SSHException: No existing session
Problém zmizí, pokud to spustím pod rootem.
Šlo by to spouštět bez roota?
Dík
Nepíšeš jak jsi to zkoušel řešit (a proč to vůbec zkoušíš pod rootem) ale hned první google odkaz na chybovou hlášku vede na https://github.com/paramiko/paramiko/issues/1574
Tj když se přihlašuješ pomocí jména a hesla, zavolej ssh.connect() s parametry look_for_keys=False, allow_agent=False aby knihovna nezkoušela SSH klíče.