sshpass 命令exit code 6 问题解决方法

文章讲述了在使用sshpass进行自动化脚本时遇到的错误码6(Hostpublickeyisunknown),即目标服务器未接受SSH公钥。解决方法是手动连接并接受公钥。参考链接提供了一个StackOverflow问题的解决方案。

近期在使用sshpass做自动化交互的脚本,结果运行命令后会返回错误码6,命令如下:

sshpass -p 123456 ssh test@192.168.1.100 "uname -a" 

经搜索资料发现,错误码6指的是Host public key is unknown,也就是说要访问的地址是第一次访问,没有经过ssh公钥检查,此时有一种解决方法,如下:

  1. 手动先ssh对应IP,输入yes保存公钥
ssh test@192.168.1.100

image.png

Reference:
https://stackoverflow.com/questions/33961214/docker-run-fails-with-returned-a-non-zero-code-6

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import subprocess import sys # 配置参数 LOCAL_DIR = "./m2001" REMOTE_USER = "root" REMOTE_HOST = "192.168.137.99" REMOTE_PATH = f"/home/{REMOTE_USER}/." SSH_OPTS = "-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa" def run_command(cmd): """执行命令并实时输出结果""" try: # 使用 shell=True 来运行复杂命令(含重定向、管道等) result = subprocess.run(cmd, shell=True, check=True) return result.returncode except subprocess.CalledProcessError as e: print(f"❌ 命令执行失败:{e}") return e.returncode except Exception as e: print(f"⚠️ 发生异常:{e}") return 1 def main(): print("🚀 开始执行 SCP 文件传输...") # 构建 scp 命令 scp_cmd = ( f"scp {SSH_OPTS} -r {LOCAL_DIR} " f"{REMOTE_USER}@{REMOTE_HOST}:{REMOTE_PATH}" ) print(f"📁 执行命令: {scp_cmd}") ret = run_command(scp_cmd) if ret != 0: print("🛑 文件传输失败,终止操作。") sys.exit(ret) print("✅ 文件传输成功!现在启动 SSH 连接...") # 构建 ssh 命令 ssh_cmd = f"ssh {SSH_OPTS} {REMOTE_USER}@{REMOTE_HOST}" print(f"🔗 执行命令: {ssh_cmd}") print("💡 已进入远程终端,输入 'exit' 可退出。\n") # 使用 subprocess.call() 让用户与 SSH 会话交互 try: ret = subprocess.call(ssh_cmd, shell=True) if ret == 0: print("👋 成功退出远程会话。") else: print(f"⚠️ SSH 会话异常退出,返回码: {ret}") except KeyboardInterrupt: print("\n👋 用户中断连接。") except Exception as e: print(f"⚠️ SSH 连接过程中发生错误: {e}")这个脚本ssh和scp之后都需要输入密码,可不可以做一个scp和ssh之后提示输入密码,输入完之后ssh成功再进行scp,scp之后输入密码,
最新发布
11-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值