方式1:秘钥(推荐)
A\B机器,如果A访问B免密,就把A的公钥给B,反之亦然
步骤1:在 A 上生成密钥对(一路回车)
生成一对 2048 位 的 RSA 密钥,私钥文件叫 id_rsa,放在当前用户的 .ssh 目录下。
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
- -t rsa
作用:告诉 ssh-keygen 我要生成哪种类型的密钥。
rsa 只是其中一种,还可以选 ed25519、ecdsa、dsa 等。
目前老系统兼容性最好的是 rsa,新系统推荐更快更短的 ed25519。- -b 2048
作用:指定 密钥长度(位数)。
2048 表示 2048 bit(比特)。数字越大越安全,但运算也越慢。
rsa 的常见取值:
1024(已不安全,不推荐)
2048(主流,够用)
4096(更保险,SSL 证书/高安全场景)- -f ~/.ssh/id_rsa
作用:指定 私钥文件名和存放路径。
如果不写 -f ,ssh-keygen 会默认把私钥放在
~/.ssh/id_rsa ,公钥放在 ~/.ssh/id_rsa.pub 。
写了 -f /tmp/my_key ,就会生成:
私钥: /tmp/my_key
公钥: /tmp/my_key.pub
步骤2:方式1:把公钥发到 B(一次性输密码)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@远程服务器
如果 B 的 ssh 端口不是 22,加 -p 端口号
例: ssh-copy-id -p 2222 -i ~/.ssh/id_rsa.pub root@远程服务器
输完 B 的密码后,公钥会自动追加到 B 的
/root/.ssh/authorized_keys 文件里。
步骤2:方式2:把公钥发到 B
U 盘/微信/邮件人肉拷贝
- 在 A 机器上把公钥拷出来
cat ~/.ssh/id_rsa.pub
- 把屏幕上的整行字符串复制到剪贴板。
- 登录 B 机器,粘贴追加到 authorized_keys
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "刚才那整行字符串" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
步骤 3:验证免密登录
ssh root@B_IP
成功的话不再提示输入密码。
常见错误:
-bash: ssh-copy-id: command not found //提示命令不存在
解决办法:yum -y install openssh-client
| 现象 | 解决 |
| 仍要密码 | 1) B 上 `~/.ssh` 权限必须是 700,`authorized_keys` 6002) `sshd_config` 里 `PubkeyAuthentication yes` & `AuthorizedKeysFile .ssh/authorized_keys` |
| 提示 `Permission denied (publickey、gssapi-keyex、gssapi-with-mic)` | 查看 `/var/log/secure`,多半是权限或 SELinux 拦了,临时关闭测试:`setenforce 0` |
| 端口非 22 | `ssh-copy-id “-p 2222 root@B_IP”` 注意引号 |
方式2:自动输入密码
先安装软件包
yum -y install epel-release # 如已装可跳过
yum -y install sshpass
使用 sshpass + scp 把远程文件 非交互式 拷贝到本地
sshpass -p '远程密码' \
scp -P 1022 -o StrictHostKeyChecking=no \
user@远程IP:/remote/path/file.txt /local/path/
首次连接仍会提示 ECDSA key fingerprint ,加 -o StrictHostKeyChecking=no 可跳过。
若要拉整个目录,加 -r , scp -r -P 1022 -o StrictHostKeyChecking=no
本地文件拷贝到远程
# 把本地 /data/a.tar.gz 拷到 192.168.1.100 的 /backup/
sshpass -p '远程密码' \
scp -o StrictHostKeyChecking=no \
/data/a.tar.gz root@192.168.1.100:/backup/
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
