ssh 算是 linux 下最常用的工具之一,虽然用了很多次但对它并不是很了解,本文将查找一些资料并总结自己使用的 ssh ,希望能够通过这篇文章,帮助理解和使用 ssh。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995 年,芬兰学者Tatu Ylonen设计了 ssh 协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为 linux 系统的标准配置。

ssh 是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用 ssh 协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。需要指出的是,ssh 只是一种协议,存在多种实现,既有商业实现,也有开源实现。

基本用法

假定你要以用户名 user,登录远程主机 host,如:ssh user@host;SSH的默认端口是 22,也就是说,你的登录请求会送进远程主机的 22 端口。使用 p 参数,可以修改这个端口,如:ssh -p 2222 user@host

ssh 登录同样可以使用密码登录,输入用户名后,输入密码即可完成登录,但一般我们不这么做,我们使用 ssh 的目的就是防止密码被截取,因此一般我们采用秘钥对的形式来验证本地主机和目标机是否可以配对。我们将公钥放在目标机器上,然后登录目标机器时,本地机器的私钥能够和目标机器的秘钥配对,则验证通过,否则验证失败。

值得注意的是,公钥并不需要特别在意,它往往是公开的,即便被别人获取也无法产生威胁,真正重要的是私钥。我们可以将公钥比作你的用户名,私钥则是你的密码。密码的重要性不言而喻,因此私钥一旦丢失往往会造成很严重的后果,我们往往需要更改私钥的存放位置,或者给私钥再设置一个使用密码。

本地SSH配置

  • 首先我们需要检查你电脑上现有的 ssh key:
1
$ cd ~/.ssh 检查本机的ssh密钥

如果提示:No such file or directory 说明你是第一次使用 git。

  • 生成新的SSH Key:
1
ssh-keygen -t rsa -C "邮件地址@youremail.com"

此处的邮箱地址,你可以输入自己的邮箱地址;注意2: 此处的「-C」的是大写的「C」

  • 然后系统会要你输入密码:
1
2
Enter passphrase (empty for no passphrase):<输入加密串>
Enter same passphrase again:<再次输入加密串>

在回车中会提示你输入一个密码,这个密码会在你提交项目时使用,相当于二次的加密,如果为空的话提交项目时则不用输入。这个设置是防止别人往你的项目里提交内容。个人嫌麻烦一般不会再设定密码,本身ssh的访问就属于本地自动加密认真,就比较安全,除非你秘钥丢失,否则一般不会出问题,

  • 看到这样的界面,就成功设置了本地的 ssh key了:

  • ~/.ssh/id_rsa.pub 就是需要使用的公钥,将该公钥加入到其他系统上面或者支持ssh服务的软件上面即可实现访问。

将本地公钥上传到远程linux服务器

不同的 Linux 之间 copy 文件常用有3种方法:

  • 第一种就是 ftp,也就是其中一台 Linux 安装 ftp Server,这样可以另外一台使用 ftp 的 client 程序来进行文件的 copy。
  • 第二种方法就是采用 samba 服务,类似 Windows 文件 copy 的方式来操作,比较简洁方便。
  • 第三种就是利用 scp 命令来进行文件复制。

scp 是有Security的文件 copy,基于 ssh 登录。操作起来比较方便,比如要把当前一个文件 copy 到远程另外一台主机上,可以如下命令。

1
scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

然后会提示你输入另外那台 172.19.2.75 主机的 root 用户的登录密码,接着就开始 copy 了。如果想反过来操作,把文件从远程主机 copy 到当前系统,也很简单。

1
scp root@172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

scp 沿用了 ssh 的规则,默认一般是 22 端口,如果需要指定其他端口的话可以加上 -P [端口号],如:

1
scp -P 2222 /home/daisy/full.tar.gz root@172.19.2.75:/home/root
  • 我们将原始机的公钥拷贝到目标服务器的 .ssh 目录下,且命名为 authorized_keys。
1
scp /home/git/.ssh/id_rsa.pub git@ubuntu_server:/home/git/.ssh/authorized_keys

注意,ubuntu_server 为 ip 对应的名称,这边可以改成 ip 地址,git 为用户名。修改实体机(本地机而不是服务器)的 ip 配置文件 /ect/hosts,加入如下行:192.168.18.202 ubuntu_server, ubuntu_server 是你的虚拟机的主机名称,而 ubuntu_server 以后将代替 192.168.18.202 出现。如果你的虚拟机名不是 ubuntu_server,可以修改 /etc/hostname 中的名称。

注意:ssh在使用时无法通过VPN,需要人为手动做一些修改,这边主要是通过将需要ssh访问的ip地址直接经过网卡而不经过vpn。详细内容参见linux 下 ssh 通过VPN推送失败文章。

windows 下使用 ssh

windows 使用 ssh 一般可以通过 putty 或者 secureCRT,这两款软件都是自带 ssh 服务的,一般你安装他们后,windows 上就可以使用 ssh 了。如果需要秘钥登录的话,需要手动加载秘钥位置,如:secureCRT 的秘钥在 tools 下的 manage agents keys -> add,具体的一些位置需要自己去查找,这边不再详细讨论。

windows 下除了 ssh 登录外,使用 git 时也会需要加载私钥,git 官方版回去默认位置找私钥,默认位置一般为当前用户目录下的 .ssh 文件夹下。对于 linux 就是 ~/.ssh/ 目录下,而 windows 则是 C:/users/当前登录用户/.ssh/ 目录下。

使用 WinSCP 时,也可以使用 scp 复制文件,注意该软件只能读 ppk 格式的秘钥,如果其采用的不是 openSSH 的秘钥,则需要通过工具转换以下,步骤为:

  • 工具->运行 PuTTYgen->load你的秘钥->save private key 保存转成 ppk 格式 (如果直接通过 WinSCP 生成秘钥对的话,可以在 PuTTYgen 中直接 点解 generate 生成新的秘钥对)
  • 工具->运行pageant->add key 将刚刚生成的秘钥载入进来

http://cnfeat.com/blog/2014/05/10/how-to-build-a-blog/
http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html
http://blog.csdn.net/hunanchenxingyu/article/details/40544513
http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html