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
可选配置
- 在
~/.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
- 禁用远程服务器的密码认证(增强安全性)
在远程服务器的/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
目录权限为700
,authorized_keys
文件权限为600
-
如果使用非标准SSH端口,SCP命令需要指定端口:
scp -P port_number ...
-
出于安全考虑,生产环境中建议为密钥设置密码短语,然后使用
ssh-agent
管理密钥