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

同时使用SSH和SFTP时重复输密码的替代解决方案求助

问题描述

我编写了一个从远程服务器拉取日志文件的工作脚本,流程如下:

  1. 用户输入用户名及两个日志文件名;
  2. 通过SSH执行ls -ltr命令查看文件大小;
  3. 用户确认后,用SFTP拉取目标文件。

当前遇到的问题是:SSH和SFTP操作会分别要求输入密码,且管理员禁用了sshpass工具,无法用它跳过密码输入,寻求替代解决方法。

附上当前脚本代码:

#!/bin/bash

read -p "UserID: " UserID
read -p "Error file: " file1
read -p "Log file: " file2

ssh $UserID@127.0.0.1 "ls -ltr /logs/$file1 && ls -ltr /logs/$file2"
read -p "Please check the file size, do you want to proceed? (y/n): " choice

if [[ "$choice" == "y" ]]
then
sftp $UserID@127.0.0.1 << EOF
  get /logs/$file1 /home/
  get /logs/$file2 /home/
EOF
else
    echo "Exiting..."
        exit
fi

解决方案

方案1:SSH密钥对认证(彻底免密)

这是最推荐的长期解决方案,配置一次后即可永久免密连接:

  • 生成SSH密钥对:在本地终端执行以下命令,全程按回车使用默认配置(不要设置密钥密码,否则每次连接仍需输入):

    ssh-keygen -t ed25519
    

    (若系统不支持ed25519算法,可替换为ssh-keygen -t rsa -b 4096)

  • 上传公钥到远程服务器:用ssh-copy-id工具一键完成公钥部署,执行时需输入一次远程用户密码:

    ssh-copy-id $UserID@127.0.0.1
    
  • 验证:重新运行脚本,SSH和SFTP操作都不会再要求输入密码。

方案2:SSH连接复用(仅输一次密码)

如果暂时无法配置密钥对,可利用SSH连接复用特性,让SSH和SFTP共享同一个连接,只需输入一次密码:
修改后的脚本如下:

#!/bin/bash

# 定义控制套接字路径,用于标识复用的连接
CONTROL_SOCKET="/tmp/ssh_control_$UserID@127.0.0.1"

read -p "UserID: " UserID
read -p "Error file: " file1
read -p "Log file: " file2

# 建立可复用的控制连接,并执行文件查看命令
ssh -o ControlMaster=yes -o ControlPath="$CONTROL_SOCKET" -o ControlPersist=60s $UserID@127.0.0.1 "ls -ltr /logs/$file1 && ls -ltr /logs/$file2"
read -p "Please check the file size, do you want to proceed? (y/n): " choice

if [[ "$choice" == "y" ]]
then
# 复用已建立的连接执行SFTP拉取
sftp -o ControlPath="$CONTROL_SOCKET" $UserID@127.0.0.1 << EOF
  get /logs/$file1 /home/
  get /logs/$file2 /home/
EOF
else
    echo "Exiting..."
fi

# 关闭复用连接,清理套接字文件
ssh -o ControlPath="$CONTROL_SOCKET" -O exit $UserID@127.0.0.1
exit

参数说明:

  • ControlMaster=yes:创建控制连接作为复用的主连接
  • ControlPath:指定套接字文件路径,用于关联复用的连接
  • ControlPersist=60s:主连接在最后一次使用后保持60秒,足够用户确认操作
  • -O exit:最终关闭主连接,避免残留临时文件

内容的提问来源于stack exchange,提问作者John Llery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:23:36