You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSH连接Linux服务器后,为SCP命令传入ESXi主机密码?

如何为跨服务器SCP命令传入ESXi主机密码

方法一:使用sshpass工具自动传递密码

  • 先确保中转Linux服务器已安装sshpass:

    • Debian/Ubuntu系统:sudo apt-get install sshpass
    • RHEL/CentOS系统:sudo yum install sshpass
  • 修改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
  • 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:52:25