使用Paramiko连接SSH后,scp传输文件仍要求输入密码的解决方法
问题原因
你通过paramiko建立的SSH连接和os.system('scp ...')调用的系统scp命令是完全独立的两个进程,scp不会复用paramiko已经建立好的连接,所以仍然会要求输入密码。
解决方案
方案一:使用paramiko内置的SCPClient(推荐)
直接用paramiko提供的SCPClient模块来传输文件,复用已有的SSH连接,无需额外验证。修改后的代码如下:
# importando as bibliotecas import paramiko from paramiko.scp import SCPClient # criando o cliente ssh client = paramiko.SSHClient() # carregando as chaves de autenticação client.load_system_host_keys() # adicionando uma chave de autenticação client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) print('Enviando o arquivo de descriptografia') # conectando ao servidor client.connect('192.168.15.21', username='kali', password='kali') # 使用SCPClient传输文件 with SCPClient(client.get_transport()) as scp: scp.put('file.py', remote_path='/home/kali/file.py') # fechando a conexão client.close()
方案二:通过sshpass传递密码给scp命令(不推荐)
如果你坚持要使用系统scp命令,可以先在本地安装sshpass工具(Kali默认已安装,其他系统可通过包管理器安装),然后修改scp命令的调用方式:
os.system('sshpass -p "kali" scp file.py kali@192.168.15.21:/home/kali')
注意:这种方式密码会以明文形式出现在系统进程列表中,存在安全风险,仅适合测试场景使用。
内容的提问来源于stack exchange,提问作者BloodHound
相关产品推荐
相关产品推荐

