但行好事
莫论前程❤

SSH使用—-免秘钥登录

###服务器间跳转

# ssh 用户名@主机ip
ssh ubuntu@140.143.5.20

前言

ssh-copy-id 是一个实用ssh去登陆到远程服务器的脚本(假设使用一个登陆密码,因此,密码认证应该被激活直到你已经清理了做了多个身份的使用)。它也能够改变远程用户名的权限,~/.ssh和~/.ssh/authorized_keys删除群组写的权限(在其它方面,如果远程机上的sshd在它的配置文件中是严格模式的话,这能够阻止你登陆).

#  在本地机器上使用ssh-keygen产生公钥私钥对
ssh-keygen -t rsa         

#  用ssh-copy-id将公钥复制到远程机器中
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@192.168.156.101
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@192.168.156.102
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@192.168.156.103
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@192.168.156.104    

ssh-copy-id 是一个实用ssh去登陆到远程服务器的脚本

ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上(该文件权限为600),ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

语法
ssh-copy-id [-i [identity_file]] [user@]machine    # identity 身份
选项
-i:指定公钥文件 
不写 -i:默认值为~/.ssh/id_rsa.pub
实例

把本地的ssh公钥文件安装到远程主机对应的账户下:

ssh-copy-id user@server
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

SSH命令详解

Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。

传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口

令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器

的数据,然后再冒充用户把数据传给真正的服务器。而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH

协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

​ SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为

FTP、POP、甚至为PPP提供一个安全的“通道”。 『维基百科』

格式:

ssh  [user@]host [command]
选项:
    -1:强制使用ssh协议版本1;
    -2:强制使用ssh协议版本2;
    -4:强制使用IPv4地址;
    -6:强制使用IPv6地址;
    -A:开启认证代理连接转发功能;
    -a:关闭认证代理连接转发功能;
    -b:使用本机指定地址作为对应连接的源ip地址;
    -C:请求压缩所有数据;
    -F:指定ssh指令的配置文件;
    -f:后台执行ssh指令;
    -g:允许远程主机连接主机的转发端口;
    -i:指定身份文件;
    -l:指定连接远程服务器登录用户名;
    -N:不执行远程指令;
    -o:指定配置选项;
    -p:指定远程服务器上的端口;
    -q:静默模式;
    -X:开启X11转发功能;
    -x:关闭X11转发功能;
    -y:开启信任X11转发功能。

SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。

从客户端来看,SSH提供两种级别的安全验证:

1、基于口令的验证

只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是我画了的登录验证流程:


当第一次链接远程主机时,会提示您当前主机的”公钥指纹”,询问您是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。(known_hosts文件用于保存服务器名和ip的映射关系,以便ssh链接时可以使用服务器名代替ip地址)。known_hosts文件中的内容会在第一次链接远程服务器时追加到改文件中。

2、基于密钥的验证

这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

如何生成密钥:

1、在客户端打开终端,执行ssh-keygen,该命令会默认在~/.ssh/目录下创建id_rsa、id_rsa.pub两个文件,分别为您的公钥和私钥。

2、将公钥id_rsa.pub文件拷贝到服务器端的~/.ssh/authorized_keys文件中,有三种方法:

  • 通过scp拷贝:
     例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys #可选参数-P代表指定用端口号22
  • 通过ssh-copyid程序:
     例:ssh-copy-id user@host #此种方式简单,不需追加改文件名,但不能指定端口号,默认以22端口
  • 通过cat方法:
     例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’

免密码登录原理


图解,server A免登录到server B:
1.在A上生成公钥私钥。
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
3.Server A向Server B发送一个连接请求。
4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。

赞(2) 打赏
未经允许不得转载:刘鹏博客 » SSH使用—-免秘钥登录
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏