如何在SSH连接Linux服务器后,为SCP命令传入ESXi主机密码?
如何为跨服务器SCP命令传入ESXi主机密码
方法一:使用sshpass工具自动传递密码
先确保中转Linux服务器已安装sshpass:
- Debian/Ubuntu系统:
sudo apt-get install sshpass - RHEL/CentOS系统:
sudo yum install sshpass
- Debian/Ubuntu系统:
修改Python代码中的SCP命令,通过sshpass直接传入ESXi密码:
esxi_password = "你的ESXi密码" scp_command = f"sshpass -p '{esxi_password}' scp -o StrictHostKeyChecking=no {local_file_path} {esxi_user}@{esxi_host}:{remote_file_path}"
注意:此方式会将密码明文暴露在系统进程列表中,生产环境建议配合密钥认证或加密存储密码的方案使用。如果密码包含单引号、空格等特殊字符,需要提前转义(例如用双引号包裹密码并转义内部特殊字符)。
方法二:使用expect脚本处理交互式密码输入
如果服务器无法安装sshpass,或者需要更灵活的交互式处理,可使用expect脚本:
先确保中转Linux服务器已安装expect:
- Debian/Ubuntu系统:
sudo apt-get install expect - RHEL/CentOS系统:
sudo yum install expect
- Debian/Ubuntu系统:
修改Python代码,构造并执行expect脚本自动响应密码提示:
esxi_password = "你的ESXi密码" # 构造expect脚本 expect_script = f""" spawn scp -o StrictHostKeyChecking=no {local_file_path} {esxi_user}@{esxi_host}:{remote_file_path} expect "password:" send "{esxi_password}\\r" expect eof """ # 执行expect脚本 stdin, stdout, stderr = ssh_linux.exec_command(f"expect -c '{expect_script}'") scp_exit_status = stdout.channel.recv_exit_status() # 原有的日志判断和连接关闭逻辑保持不变
注意:若密码包含
\、$、[]等特殊字符,需对这些字符进行转义(例如将\替换为\\),避免脚本解析出错。
内容的提问来源于stack exchange,提问作者Akshay J
相关产品推荐
相关产品推荐

