SSH密钥认证:实现远程服务器免密登录的两种方法|Linux scp命令详解:高效

[复制链接]
发表于 2026-10-3 15:41:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

SSH 免密登录两种做法,以及 scp 传文件的完整参数

服务器之间要不要跨机操作,是人为敲命令还是程序自动跑,决定了一件事:能不能免密登录。人登录每次输密码无所谓,脚本要跨服务器调接口、拉数据,每次弹密码就完全不现实。这篇文章把 SSH 密钥认证两种配法和 scp 的参数用法一次说清。

一、SSH 远程登录先走一遍

准备两台机器,比如 192.168.150.175(本机)和 192.168.150.148(目标机),从 175 登 148。

先 ping 一下确认网络通:

ping 192.168.150.148

然后直接登录:

ssh [email protected]

这一步会要密码,而且第一次连某台新机器时会问一句"是否需要继续连接",输入 yes 即可。输对密码就登进去了。

能用密码登录,只是我们想要的是免密。

二、免密方式一:ssh-copy-id

2.1 生成公钥私钥

ssh-keygen

一路三次回车用默认配置即可。生成结果是:公钥在 /root/.ssh/id_rsa.pub,私钥在 /root/.ssh/id_rsa。

2.2 拷贝公钥到目标机

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

这个命令类似 scp,会把本机公钥传过去,执行时还是要输一次目标机密码。

2.3 验证

ssh [email protected]

不再要密码,直接进去了。

三、免密方式二:手动追加 authorized_keys(推荐)

方式一要求你知道目标机 root 密码,实际工作里这往往不好办。第二种方式更靠谱。

3.1 生成本机密钥对

ssh-keygen

和方式一第一步完全一样,三次回车。

3.2 查看并复制公钥内容

vim /root/.ssh/id_rsa.pub

内容形如 ssh-rsa AAAAB3... root@bogon,把整行复制下来。

3.3 把公钥写进目标机的 authorized_keys

目标机上如果没有这个文件,先在本地执行 ssh localhost 生成一次,文件就出现了。然后把上一步的公钥内容粘贴进去。

vim /root/.ssh/authorized_keys

特别注意:如果文件里已经有别的公钥,要换行追加,千万别覆盖,否则其他服务器登录这台机器时免密就失效了。

3.4 验证

ssh [email protected]

两种方式本质上没区别,都是"把公钥放到目标服务器上"。一种是 scp 式拷贝,一种直接登录服务器写文件。

顺带一提,密钥文件权限要正常:.ssh 目录 700,authorized_keys 和私钥 600,权限太松 SSH 会拒绝用密钥登录。

四、scp 命令详解

4.1 它是什么

  • scp 用于 Linux 之间复制文件和目录。
  • 是 secure copy 的缩写,基于 SSH 登录进行安全的远程文件拷贝,数据是加密的。
  • rcp 不加密,scp 是它的加强版。

4.2 语法

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 [...] [[user@]host2:]file2

常用参数:

参数说明
-1 / -2强制使用 SSH1 / SSH2 协议
-4 / -6只用 IPv4 / IPv6 寻址
-B批处理模式,传输中不询问口令
-C允许压缩,传给 ssh 打开压缩
-p保留原文件的修改时间、访问时间和权限
-q不显示传输进度条
-r递归复制整个目录
-v详细模式,输出调试信息,用于排查连接问题
-i identity_file指定使用的密钥文件
-l limit限定带宽,单位 Kbit/s
-P port注意大写 P,指定 SSH 端口

4.3 从本地复制到远程

scp /home/space/music/1.mp3 [email protected]:/home/root/others/music
scp /home/space/music/1.mp3 [email protected]:/home/root/others/music/001.mp3

前两条指定了用户名,执行后要输密码;第一条只指定远程目录、文件名不变,第二条同时指定了文件名。后面两条没写用户名,要连用户名一起输,且行为同理。

复制目录加 -r:

scp -r /home/space/music/ [email protected]:/home/root/others/
scp -r /mnt/ [email protected]:/www/algorithm/old_code

4.4 从远程复制到本地

把上面命令的两个参数调换顺序即可:

scp [email protected]:/home/root/others/music/1.mp3 /home/space/music/
scp -r [email protected]:/home/root/others/music/ /home/space/music/

4.5 指定端口

远程服务器防火墙如果给 SSH 设了非默认端口,用大写 -P:

scp -P 4588 [email protected]:/usr/local/sin.sh /home/administrator

五、几个实际建议

  • 配好免密后,scp 也能免密传,脚本链路直接打通。
  • 传大文件加 -C 压缩、-p 保属性;传目录永远记得 -r,忘了会报"not a regular file"。
  • SSH 连不上时先 scp -v / ssh -v 看调试输出,定位到哪一步断的。
  • 别把私钥 id_rsa 泄露出去,权限设 600,丢了就换钥匙重新分发。

小结

免密登录的本质只有一句:把本机公钥放到目标机的 authorized_keys 里。图省事用 ssh-copy-id,要更可控就手动复制公钥内容追加进去、注意别覆盖已有公钥。scp 记住三个高频参数:-r 传目录、-P 指定端口(大写)、-p 保原属性。配合密钥登录,两台机器之间就能全程无交互。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表