学习 Linux SSH
Posted on 2014-04-04 17:00 in Tools
实验室的师兄师姐毕业了,继承了他们的旧电脑 。宿舍的笔记本和实验室的电脑出现了相互之间传送同步文件的需求 。想到了两种方法:
- 云同步
- SSH / SCP
解决方案 1 是最省事的,也是目前最流行的,目前各大互联网公司都提供各种云服务,比如国外的 Google Drive、Dropbox,国内的百度云、360 网盘什么的。这种方案最大的有点是跨平台,不过这个方案是借助了第三方的服务器,需要连接到互联网才行,而且对网速是有一定要求的。
解决方案 2 相比于方案 1 的优势是:不是必须要连接到互联网,在局域网内也可以同步文件 。一般局域网内传输文件的速度要比连外界的服务器快很多 。
考虑到校园网的环境,明显方案 2 更加好 。
什么是 SSH
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑 。SSH 协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为 Linux 系统的标准配置 。
最初的 SSH 协议是由芬兰的一家公司的研究员 Tatu Ylönen 于 1995 年设计开发的,但是因为受版权和加密算法等等的限制,现在很多人都转而使用 OpenSSH 。OpenSSH 是 SSH 的替代软件包,而且是开放源代码和免费的 。—— Wikipedia
关于 SSH 的原理,找到了一系列 阮一峰的文章,很简洁明了 :
SSH
SSH 的用法
最简单明了的教程就是 man page 了
1 |
|
内容为
1 2 3 4 5 6 7 8 9 10 |
|
进阶的书籍有:SSH, The Secure Shell: The Definitive Guide, O'reilly
目前已经有两台安装了 Ubuntu 的电脑,实验室的一台 name 是 lab ,宿舍的一台 name 是 dom ,两台电脑上都有一个用户名为 chien 。
我们的目的是使两台电脑可以相互之间通过 SSH 访问。 下面就是整个过程:
安装 SSH server
SSH 只是一种协议,在 Ubuntu 下,具体实现使用的是 OpenSSH 。Ubuntu 默认是安装了 SSH 客户端 openssh-client
,而没有安装 SSH 服务程序 openssh-server
。
检测本机是否已经安装了 SSH server
1 |
|
如果结果是
1 |
|
说明 SSH server 还没有安装 。
安装方法:
1 |
|
启动 SSH 服务
启动 SSH server
1 |
|
查询服务是否正确启动
1 |
|
返回结果应该类似于
1 2 |
|
则说明服务已经正确启动 。
因为两台电脑要相互访问,所以它们的角色即使 server,又是 client,所以需要在两台电脑上都执行上面两步 。
远程访问
首先,查询本机 IP 地址
1 |
|
比如 lab 的 IP 地址是 10.105.55.155
, dom 的 IP 地址是 10.210.111.116
。(因为是校园网,所以分配到的都是内网地址)
然后,在宿舍用 dom 访问 lab 这台机器
1 |
|
实际结果如下图
在执行命令前,提示符显示目前的用户是在 dom 这台机器上的用户 chien,本机 home 目录下有 dom
文件,但是没有 lab
文件 。执行了登录命令以后,就会切换到以 chien 身份登录到 lab 机器,远程机器 home 目录下有 lab
文件,但是没有 dom
文件 。
同理,在实验室用 lab 访问 dom 这台机器
1 |
|
实际结果如下图
在执行命令前,提示符显示目前的用户是在 lab 这台机器上的用户 chien,本机 home 目录下有 lab
文件,但是没有 dom
文件 。执行了登录命令以后,就会切换到以 chien 身份登录到 dom 机器,远程机器 home 目录下有有 dom
文件,但是没有 lab
文件 。
省去 IP 地址
每次登录都需要记忆、手动输入 IP 地址,其实只需要改 /etc/hosts
文件,就能省去手动输入 IP 地址的烦恼。
1 |
|
在 dom 的 hosts 文件后面添加
1 |
|
在 lab 的 hosts 文件后面添加
1 |
|
以后,登录时只需要输入
1 2 3 4 5 |
|
就可以登录了。
公钥登录
上一步解决了 IP 地址的问题,但是还是需要手动输入密码 。我们可以用公钥登录的方法,免去输密码的烦恼。
首先,什么是数字签名 Digital Signature
其次,生成数字签名
Ubuntu 默认安装了 ssh-keygen
,可以生成公钥和私钥
1 |
|
命令执行过程中会询问保存密钥文件的路径,还可以为密钥文件设置口令(passphrase)。运行结束以后,在 $HOME/.ssh/
目录下,会新生成两个文件:id-rsa.pub
和 id-rsa
。前者是你的公钥,后者是你的私钥。
然后,发布数字签名
使用 ssh-copy-id
命令可以把公钥复制到远程机器中 。
将 dom 的公钥发送到 lab 中
1 |
|
将 lab 的公钥发送到 dom 中
1 |
|
最后,使用公钥登录
此时,远程登录时就不再需要输入密码了
1 2 3 4 5 |
|
使用 SCP 传输文件
SSH 提供了一些命令和 shell 用来登录远程服务器 。在默认情况下它不允许你拷贝文件 , 但是还是提供了一个 "scp" 命令 。scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件。仅仅用 scp 一个命令就完全解决了 。
man page
1 |
|
内容为
1 2 3 4 5 6 7 |
|
scp 可以实现把 [[user@]host1:]file1 复制到 [[user@]host2:]file2 的功能。所以
上传 dom 本地文件至服务器 lab
1 |
|
下载 lab 服务器文件至本地 dom
1 |
|
若发送文件夹则添加参数 -r
即可
1 |
|
至此,就实现了两台电脑的之间相互远程访问的功能 。