马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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企服评测-应用市场 编辑提示 |