如何在Shell脚本中自定义SFTP的密码提示输出内容
修改SFTP密码提示的方法
SFTP本身没有直接修改密码提示的内置参数,因为其密码认证流程依赖SSH客户端,而SSH的默认密码提示是硬编码的。要实现自定义的$user@$host's Password:提示,可以通过Expect脚本拦截原提示并替换,具体步骤如下:
- 创建一个Expect脚本文件(比如
sftp_custom_prompt),内容如下:
#!/usr/bin/expect -f set user [lindex $argv 0] set host [lindex $argv 1] set custom_prompt "${user}@${host}'s Password:" # 启动带详细输出的SFTP连接 spawn sftp -v -oport=22 ${user}@${host} # 拦截默认的"Password:"提示,替换为自定义提示 expect "Password:" { send_user "$custom_prompt\n" # 读取用户输入的密码 expect_user -re "(.*)\n" # 将密码发送给SFTP进程完成认证 send -- "$expect_out(1,string)\r" } # 保持后续的交互会话 interact
- 给脚本添加执行权限:
chmod +x sftp_custom_prompt
- 使用脚本连接远程主机,传入用户名和主机名参数:
./sftp_custom_prompt $user $host
执行后,原本的Password:提示会被替换为$user@$host's Password:,输入的密码也会正常传递给SFTP完成认证。
内容的提问来源于stack exchange,提问作者Mohammed Shaheer
相关产品推荐
相关产品推荐

