当前位置: 首页 > news >正文

Linux SCP传输文件免密配置

文章目录

  • Linux SCP传输文件免密配置
    • 生成SSH密钥对
    • 将公钥复制到远程服务器
    • 测试SSH连接
    • 使用SCP免密传输文件
    • 可选配置
    • 带密码的秘钥连接处理
      • 使用 `ssh-agent`进行缓存管理(该方式只能确保同一个回话中,多次传输只输一次密码)
      • 使用 `keychain`(长期缓存 `passphrase`)
    • 注意事项

Linux SCP传输文件免密配置

要在Linux系统之间使用SCP传输文件而不需要每次输入密码,可以通过SSH密钥认证来实现。以下是配置步骤:

生成SSH密钥对

秘钥默认存储/生成目录位置在家目录~/.ssh

在本地机器上执行:

  • rsa算法加密
ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)-$(date +%Y%m%d)"
  • ed25519算法加密
ssh-keygen -t ed25519 -C "$(whoami)@$(hostname)-$(date +%Y%m%d)"

按提示操作(可以直接按回车使用默认设置,不设置密码短语以实现完全免密)。
在这里插入图片描述

将公钥复制到远程服务器

方法一:使用ssh-copy-id命令(最简单)

ssh-copy-id username@remote_host

在这里插入图片描述

方法二:手动复制(如果没有ssh-copy-id命令)

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

在这里插入图片描述

测试SSH连接

ssh username@remote_host

如果配置正确,应该可以直接登录而不需要输入密码。

在这里插入图片描述

使用SCP免密传输文件

现在可以使用SCP命令而不需要输入密码:

# 上传文件到远程服务器
scp local_file username@remote_host:remote_directory

# 从远程服务器下载文件
scp username@remote_host:remote_file local_directory

在这里插入图片描述

可选配置

  1. ~/.ssh/config中配置别名
    编辑或创建~/.ssh/config文件(可配置多个连接):
Host myserver1
    HostName remote_host
    User username  # 连接的用户账号
    IdentityFile ~/.ssh/id_rsa # 本机的私钥
Host myserver2
    HostName remote_host·
    User username1
    Port 22 # 默认是22,如果不是需要配置Port参数
    IdentityFile ~/.ssh/other_id_rsa # 附件

然后可以使用简化的命令:

scp local_file myserver:remote_directory

在这里插入图片描述

  1. 禁用远程服务器的密码认证(增强安全性)
    在远程服务器的/etc/ssh/sshd_config中设置:
PasswordAuthentication no

然后重启SSH服务:

sudo systemctl restart sshd

带密码的秘钥连接处理

使用 ssh-agent进行缓存管理(该方式只能确保同一个回话中,多次传输只输一次密码)

如果你想避免每次都输入密钥的密码,你可以使用 ssh-agent 来缓存密钥的密码。这样,你只需要在第一次使用时输入密码,之后 ssh-agent 会自动处理密码。

使用 ssh-agent 来缓存密钥密码:

  • 启动 ssh-agent

在命令行中执行以下命令来启动 ssh-agent:

eval "$(ssh-agent -s)"

该命令会启动 ssh-agent 进程并设置一些环境变量。

  • 添加私钥到 ssh-agent

使用 ssh-add 命令将你的私钥添加到 ssh-agen。如果你使用的是 id_ed25519 作为私钥,可以执行:

ssh-add ~/.ssh/id_ed25519

然后,它会提示你输入密钥的密码一次。输入后,ssh-agent 会记住这个密码,并在你之后使用密钥时自动提供。

  • 验证是否成功:

你可以通过以下命令确认密钥是否已经被加载到ssh-agent

ssh-add -l

如果成功,你应该看到已加载的密钥信息。

  • 使用 ssh-agent 配合 ssh-copy-id:
    如果你已经将密钥添加到 ssh-agent 中,那么在以后使用 ssh 或 ssh-copy-id 连接远程服务器时,就不需要再次输入密钥密码了。

在这里插入图片描述

  • 自动启动 ssh-agent(可选):
    为了避免每次打开终端时手动启动 ssh-agent,你可以将启动命令添加到你的 shell 配置文件中(例如 .bashrc 或 .zshrc)。
# Add this to ~/.bashrc or ~/.zshrc
eval "$(ssh-agent -s)"

然后,重新加载配置文件:

source ~/.bashrc  # 或者 source ~/.zshrc

使用 keychain(长期缓存 passphrase

keychain 可以跨终端会话缓存 passphrase,适合长期免密登录。

  • 安装 keychain
sudo apt install keychain  # Debian/Ubuntu
sudo yum install keychain  # CentOS/RHEL
  • 配置 ~/.bashrc ~/.zshrc
eval "$(keychain --eval --agents ssh id_ed25519)"

下次登录时会要求输入一次 passphrase,之后所有终端会话均可免密使用。
在这里插入图片描述

注意事项

  • 确保远程服务器的.ssh目录权限为700authorized_keys文件权限为600

  • 如果使用非标准SSH端口,SCP命令需要指定端口:scp -P port_number ...

  • 出于安全考虑,生产环境中建议为密钥设置密码短语,然后使用ssh-agent管理密钥

相关文章:

  • 硕士毕设-语义分割-4-通过grounding-sam生成效果很好的pesudo
  • 【图论】最短路径问题总结
  • 伴伴租赁系统-物品售卖-二手回收-物品租赁-支持微信/支付宝小程序/app/h5
  • 通过Spring Boot集成WebSocket进行消息通信
  • Java开发者指南:深入理解HotStuff新型共识算法
  • 图文档的安全管理软件有哪些?
  • pyproj 库中 Geod 类讲解
  • RK3568使用gpio子系统完成led驱动程序编写
  • f103.delay,teitou
  • docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警
  • DevOps部署平台
  • 【数论2】
  • 【ArcGIS操作】ArcGIS 进行空间聚类分析
  • 全星研发管理APQP软件系统:驱动汽车产品研发全周期,打造高效合规的质量管理引擎
  • TDengine 中的关联查询
  • Java康威生命游戏(Conway‘s Game of Life)
  • opencv图像处理之指纹识别
  • Java并发编程笔记
  • unity3d端监听 uri scheme
  • 解决Docker端口映射后外网无法访问的问题
  • 无锡网站改版/搜索优化软件
  • 做网站 找风投/凡科建站登录
  • 手机论坛网站/学企业管理培训班
  • 做网站是属于哪个专业/百度网站制作
  • 公司官网源码/关键词优化的最佳方法
  • seo整站优化外包公司/山东seo百度推广