目录
一、ssh的安装与启动
1、安装
2、启动服务器的SSH服务
二、口令登录
1、登录命令
2、验证过程
3、登录失败:1、服务器变更 + 2、服务器IP变化
三、免密登录(公钥登录)
大致的三步
0、准备工作(不一定要弄)
1、客户端生成公私钥
2、将公钥复制到服务器中
3、第三步
4、第四步
5、第五步
6、第六步
SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。
dpkg -l | grep ssh
如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。
sudo apt update #更新数据
sudo apt upgrade #更新软件
sudo apt install openssh-server #下载安装ssh服务的服务器
sudo apt install openssh-client #下载安装ssh服务的客户端
# 上面命令下载失败可以使用下面的命令尝试下载
sudo apt-get install openssh-client
sudo apt-get install openssh-server
这里给出的是ubuntu安装命令,其它系统请参考具体的安装命令
首先确认ssh-server是否已经启动了
ps -e | grep ssh
如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:
sudo /etc/init.d/ssh start
停止和重启ssh服务的命令如下:
sudo /etc/init.d/ssh stop #server停止ssh服务
sudo /etc/init.d/ssh restart #server重启ssh服务
接下来就可以进行使用客户机远程登录服务器了~
口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址 eg:
ssh lee@IP(服务器的username和IP)
如果需要调用图形界面程序可以使用 -X 选项
ssh -X [email protected]
如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。
ssh 192.168.52.1
还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:
ssh -p 1234 [email protected]
客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:
ssh 连接远程服务器后,首先有一个验证过程,验证远程服务器是否为陌生地址。如果是第一次登录远程主机,系统会给出下面提示:
上面这段文字告诉用户,这台服务器的指纹是陌生的,让用户选择是否要继续连接(输入 yes 或 no)。所谓“服务器指纹”,指的是 SSH 服务器公钥的哈希值。每台 SSH 服务器都有唯一一对密钥,用于跟客户端通信,其中公钥的哈希值就可以用来识别服务器。
下面的命令可以查看某个公钥的指纹。
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
上面的例子中,ssh-keygen -l -f命令会输出公钥/etc/ssh/ssh_host_ecdsa_key.pub的指纹。
ssh 会将本机连接过的所有服务器公钥的指纹,都储存在本机的~/.ssh/known_hosts文件中。每次连接服务器时,通过该文件判断是否为陌生主机(陌生公钥)。
上面输入yes即可。这时系统会提示远程主机被添加到已知主机列表,即本机的~/.ssh/known_hosts文件中。
然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。
我们可以通过 Ctrl+D 或者 exit 命令退出远程登录。
服务器指纹可以防止有人恶意冒充远程主机。如果服务器的密钥发生变更(比如重装了 SSH 服务器),客户端再次连接时,就会发生公钥指纹不吻合的情况。这时,客户端就会中断连接,并显示一段警告信息。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
77:a5:69:81:9b:eb:40:76:7b:13:04:a9:6c:f4:9c:5d.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending key in /home/me/.ssh/known_hosts:36
上面这段文字的意思是,该主机的公钥指纹跟~/.ssh/known_hosts文件储存的不一样,必须处理以后才能连接。这时,你需要确认是什么原因,使得公钥指纹发生变更,到底是恶意劫持,还是管理员变更了 SSH 服务器公钥。
如果新的公钥确认可以信任,需要继续执行连接,你可以执行下面的命令,将原来的公钥指纹从~/.ssh/known_hosts文件删除。
ssh-keygen -R hostname
上面命令中,hostname是发生公钥变更的主机名。
除了使用上面的命令,你也可以手工修改known_hosts文件,将公钥指纹删除。
删除了原来的公钥指纹以后,重新执行 ssh 命令连接远程服务器,将新的指纹加入known_hosts文件,就可以顺利连接了。
每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。
1.本地机器生成公私钥
2.上传公钥到目标机器
3.测试免密登录
首先我们需要准备两台或两台以上服务器或虚拟机,配置好静态ip,配置静态ip参见博文:虚拟机配置静态ip
使用root权限分别修改每台机器的hosts,添加每台机器所对应的IP和主机名
sudo vim /etc/hosts
在其中添加所有服务器或虚拟机节点ip和对应的域名,如下图所示:
然后输入:wq保存退出。
在每个节点分别设置其hostname,如下图所示:
hostname后为当前服务器或虚拟机的域名,是让此域名立即生效,不需要重启虚拟机。
[root@Hadoop-Master ~]#cd ~/.ssh
如果没有该目录,先执行一次
ssh localhost
不要手动创建,不然配置好还要输入密码。
使用ssh-keygen命令生成密钥对:
[hadoop@localhost ~]$ ssh-keygen -t rsa
ssh-keygen
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。
使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中
ssh-copy-id -i .ssh/id_rsa.pub [email protected] #复制密钥
ssh-copy-id -i .ssh/id_rsa.pub [email protected] #复制密钥
ssh-copy-id -i /root/.ssh/id_rsa.pub master //依次输入yes,123456(root用户的密码)
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1 //同上
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2 //同上
ssh-copy-id -i /root/.ssh/id_rsa.pub slave3 //同上
[root@localhost .ssh]# cat id_rsa.pub >>authorized_keys
说明 :cat file1 >> file2 将file1 的内容追加到file2中,并不覆盖file2 中的内容,如果file2不存在则创建一个文件。
可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。
cd ~/.ssh
vim authorized_keys
ssh 192.168.35.102 #直接登录
如果成功登录到192.168.35.102这台服务器,说明你的免密登录配置成功。
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
在要连接的Slave1 和 Slave2机器上也生成公钥和私钥。并将slave1 和 slave2 机器中生成的公钥id_rsa.pub文件copy到Master机器上。
[root@localhost .ssh]# scp id_rsa.pub [email protected]:~/.ssh/id_rsa.pub_s1
[root@localhost .ssh]# scp id_rsa.pub [email protected]:~/.ssh/id_rsa.pub_s2
切换到Master机器上的Slave1、Slave2 的id_rsa.pub_s1 和id_rsa.pub_s2追加合并到authorized_keys文件中。
[root@Hadoop-Master .ssh]# cat id_rsa.pub_s1>> authorized_keys
[root@Hadoop-Master .ssh]# cat id_rsa.pub_s2>> authorized_keys
将master机器上合并后的authorized_keyscopy文件复制到Slave1、Slave2机器上
[[email protected]]# scp authorized_keys [email protected]:~/.ssh/
[[email protected]]# scp authorized_keys [email protected]:~/.ssh/
将master 、Slave1 、Slave2 等各台机器的 .ssh/文件夹权限改为700,authorized_keys文件权限改为600(or 644)。
[root@localhost .ssh]# chmod 700 ~/.ssh
[root@localhost .ssh]# chmod 600 ~/.ssh/authorized_keys
(17条消息) SSH免密登录(超详细)_我是搬砖工人的博客-CSDN博客