直接在服务器上操作
useradd test passwd test su test
在ssh目录里创建密钥
cd ~/.ssh/ ssh-keygen -t rsa -f test_rsa // -f 是给密钥起名字(yilin)
ls查看目录
authorized_keys yilin_rsa yilin_rsa.pub
把公钥放到authorized_keys,没有就自手动创建个,这里面最重要的是这一步,这样才能不互信的情况传东西。
cat yilin_rsa.pub >> authorized_keys
修改权限
chmod 700 /home/user/.ssh chmod 600 authorized_keys
拷贝出来
sz yilin_rsa (不要关闭当前窗口以免登陆失败)
xshell 修改登陆选择密钥登陆
看是否登陆成功,成功后修改 ssh配置文件/etc/ssh/sshd_config
PermitRootLogin yes PasswordAuthentication yes 修改并去掉注释和添加注释 PermitRootLogin no//去掉注释禁止root账号登陆服务器 #PasswordAuthentication yes//添加注释 RSAAuthentication yes #开启 PubkeyAuthentication yes #开启
然后重启
systemctl restart sshd
本地客户端操作
SSH 三步解决免密登录
1.客户端生成公私钥
本地客户端生成公私钥:(一路回车默认即可)
ssh-keygen
- 1
上面这个命令会在用户目录.ssh文件夹下创建公私钥
cd ~/.ssh
- 1
ls
- 1
下创建两个密钥:
- id_rsa (私钥)
- id_rsa.pub (公钥)
2.上传公钥到服务器
这里测试用的服务器地址为:192.168.235.22
用户为:rootssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.235.22
- 1
上面这条命令是写到服务器上的ssh目录下去了
cd ~/.ssh
- 1
vim authorized_keys
- 1
可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。
3.测试免密登录
客户端通过ssh连接远程服务器,就可以免密登录了。
ssh root@192.168.235.22
问题:Windows ssh-copy-id : 无法将“ssh-copy-id”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
ssh-copy-id : 无法将“ssh-copy-id”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
解决办法
在终端先执行以下内容:
function ssh-copy-id([string]$userAtMachine, $args){ $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub" if (!(Test-Path "$publicKey")){ Write-Error "ERROR: failed to open ID file '$publicKey': No such file" } else { & cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" } }
再执行
ssh-copy-id username@ip
即可。
Linux服务器出现的问题
使用 ssh 登录远程主机,提供私钥 id_rsa.rsa
ssh -l hust_fmliu -i id_rsa.rsa planetlab1.xeno.cl.cam.ac.uk
出现如下错误
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_rsa.rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: id_rsa.rsa Permission denied (publickey,keyboard-interactive).
解决方法为 chmod 600