分享

云技术基础:集群搭建SSH的作用及这些命令的含义

nettman 发表于 2014-2-24 00:43:16 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 11 39514
本帖最后由 pig2 于 2014-4-28 12:20 编辑
阅读本文可以带着下面问题:
1.你是否了解$ ssh user@host 'mkdir -p .ssh的作用?
2.cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是什么?
3.什么是SSH?
4.如何将远程主机目录下面的所有文件,复制到用户的当前目录?





authorized_keys文件

远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。


这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:



  1.   $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
复制代码
这条命令由多个语句组成,依次分解开来看:
(1)"$ ssh user@host",表示登录远程主机;
(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:
(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。

写入authorized_keys文件后,公钥登录的设置就完成了。、



上面是本文介绍的目的,让大家了解我们在搭建集群过程中,使用SSH的作用及这些命令的含义。


如果想对SSH进一步了解可以查看下面内容。



一、什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。
此外,本文只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这里不做介绍。

二、最基本的用法

SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
  1.   $ ssh user@host
复制代码
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
  1.  $ ssh -p 2222 user@host
复制代码
上面这条命令表示,ssh直接连接远程主机的2222端口。



三、中间人攻击

SSH之所以能够保证安全,原因在于它采用了公钥加密。

整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
SSH协议是如何应对的呢?


四、口令登录

如果你是第一次登录对方主机,系统会出现下面的提示:
  1.   $ ssh user@host
  2.   The authenticity of host 'host (12.18.429.21)' can't be established.
  3.   RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  4.   Are you sure you want to continue connecting (yes/no)?
复制代码
这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
  1. Are you sure you want to continue connecting (yes/no)? yes
复制代码
系统会出现一句提示,表示host主机已经得到认可。
  1. Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
复制代码
然后,会要求输入密码。
  1.   Password: (enter password)
复制代码
如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

(上面说了一大串,意思说这种登录方式,不是太安全)

五、公钥登录

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
  1.  $ ssh-keygen
复制代码
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。


这时再输入下面的命令,将公钥传送到远程主机host上面:
  1.   $ ssh-copy-id user@host
复制代码
好了,从此你再登录,就不需要输入密码了。

如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
  1.  RSAAuthentication yes
  2.  PubkeyAuthentication yes
  3.  AuthorizedKeysFile .ssh/authorized_keys
复制代码
然后,重启远程主机的ssh服务。
  1.  // ubuntu系统
  2.  service ssh restart
  3.  // debian系统
  4.  /etc/init.d/ssh restart
复制代码
六、authorized_keys文件

远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。


这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:




  1.   $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
复制代码
这条命令由多个语句组成,依次分解开来看:(1)"$ ssh user@host",表示登录远程主机;(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。

写入authorized_keys文件后,公钥登录的设置就完成了。


这里咱们几个远程登录的例子:


下面看几个例子。

【例1】

将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。
  1.   $ cd && tar czv src | ssh user@host 'tar xz'
复制代码
【例2】

将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
  1.  $ ssh user@host 'tar cz src' | tar xzv
复制代码
【例3】

查看远程主机是否运行进程httpd。
  1.   $ ssh user@host 'ps ax | grep [h]ttpd'
复制代码

加微信w3aboutyun,可拉入技术爱好者群

已有(11)人评论

跳转到指定楼层
hyj 发表于 2014-5-8 10:52:12
这里补充一下:
ssh-keygen设置ssh无密码登录
ssh-keygen - 生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥
密钥类型可以用 -t 选项指定如果没有指定则默认生成用于SSH-2的RSA密钥

ssh-keygen -t rsa命令的含义:生成密钥,并 使用rsa加密
#cat id_dsa.pub >> ~/.ssh/authorized_keys 命令的含义:

将公钥考到对方机器的用户目录下 ,并将其复制到~/.ssh/authorized_keys中


总结注意事项

1、文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。我开始图省事就这么干了

2、生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到authorized_keys

3、linux之间的访问直接 ssh 机器ip

4、某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了


配置:
1、在本地机器中的~/.ssh/目录下执行下命令
ssh-keygen -t dsa
将生成两个文件,id_dsa和id_dsa.pub

2、将id_dsa.pub拷贝到远程机器,并且将id_dsa.pub的内容添加到~/.ssh/authorized_keys中
cat id_dsa.pub >>authorized_keys
注意:目录.ssh和文件authorized_keys的权限必须是600

完成以上操作之后,用户从本地机器到远程机器就不需要用密码了


几个文件的作用说明
  ~/.ssh/identity

             该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。

             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。

             ssh将在登录的时候读取这个文件。

     ~/.ssh/identity.pub

             该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。

             此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。



     ~/.ssh/id_dsa

             该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。

             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。

             ssh将在登录的时候读取这个文件。



     ~/.ssh/id_dsa.pub

             该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。

             此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。



     ~/.ssh/id_rsa

             该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。

             生成密钥的时候可以指定采用密语来加密该私钥(3DES)。

             ssh将在登录的时候读取这个文件。



     ~/.ssh/id_rsa.pub

             该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。

             此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。



     /etc/ssh/moduli

             包含用于 DH-GEX 的 Diffie-Hellman groups

BG2BLT01 is on, BG2BLT02 is power off. They’re too noisy L

When and how to move them to data center?



Please update SSH key in .33 server for git repo access.

ssh-keygen -t dsa



scp ~/.ssh/id_dsa.pub [YOUR_USER_NAME]@10.38.116.33:authorized_keys



ssh [YOUR_USER_NAME]@ 10.38.116.33



skip below 3 steps if you already have .ssh and .ssh/authorized_keys

mkdir -m 700 .ssh

touch .ssh/authorized_keys

chmod 600 .ssh/authorized_keys



cat authorized_keys >> .ssh/authorized_keys;exit



vi ~/.ssh/config

add lines and save quit

host 10.38.116.33

user [YOUR_USER_NAME]






回复

使用道具 举报

perfri 发表于 2014-4-28 09:17:59
转走了,有空研究一下
回复

使用道具 举报

junzi234 发表于 2014-6-12 09:49:05
学习了 mark下
回复

使用道具 举报

东家卤煮 发表于 2014-7-15 14:20:10
mark,mark,mark,mark,mark,mark,mark,mark,mark,mark,mark
回复

使用道具 举报

秋风清逸 发表于 2014-12-8 16:52:43
mark一下 感谢楼主
回复

使用道具 举报

小伙425 发表于 2016-2-20 15:30:59
学习了 受益匪浅 万分感谢
回复

使用道具 举报

stwen 发表于 2016-3-1 19:26:16
恍然大悟,(*^__^*) 嘻嘻……
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条