2007年8月30日

SSH的常见使用方法

telnet已经是非常古董级的产品,老的telnet都是明文传送数据(包括密码),很容易被网络上的其它节点监听导致泄密,新一点的telnet加了一层SSL传输加密但是支持不是很广泛。

这里介绍一些SSH命令和使用方法,详细的配置和参数说明可以参考相关的手册。
1、登录
2、使用证书登录
3、穿透防火墙
4、文件拷贝
5、目录挂载



1、登录时指定用户名和主机
ssh 与 telnet 有些不同。后者会提示你输入用户名,而前者默认使用当前的登录用户名,但是大部分情况下,远端要使用的用户名都不是本地登录的用户名
可以用如下方法指定用户名

ssh -l user host

ssh user@host

然后系统才会提示你输入 user 用户的密码。
如果是第一次登录该主机,在输入密码前还会看到一段提示你是否接受密钥的对话,输入 yes 按受即可


2、用证书登录
用证书登录可以不用每次手工输入密码,只需要输入 ssh user@host 就直接进入服务器,因此可以将服务器端的密码设得很复杂以提高安全性,但是一定要保护好客户端的证书。
使用证书登书方式需要2份证书文件:
一份放在本地的 $HOME/.ssh目录下面,id_rsa,有点象IC卡钥匙
另一份放在任意多的主机上面,好比IC卡锁,id_rsa.pub

证书文件一般放在 $HOME/.ssh 目录下面,如果你还没有这个目录或者这个目录下没有任何文件,就需要生成新的公钥私钥
在客户端执行:
ssh-keygen -t rsa
(一路回车即可)
会在 $HOME/.ssh 下面产生两个文件
-rw------- 1 biff biff 1671 2007-08-30 10:46 id_rsa
rw-r--r-- 1 biff biff 395 2007-08-30 10:46 id_rsa.pub
id_rsa是私钥,安全级别较高,只允许本人查看
而 id_rsa.pub 是准备送到其它服务器上去的,给别人是没关系的。

有了证书以后就需要把公钥放到服务器上去
ssh-copy-id -i id_rsa.pub user@server
这条命令会提示你输入远端user用户的密码,然后将公钥追加到远端用户$HOME/.ssh目录下面的authorized_keys文件里
遇到新的SSH服务器以后,只需要执行这一步就行了,千万不要重新生成密钥,不然前面的那些主机就又不认得新密钥了

然后试试 ssh user@host ,就可以直接进入,不会再提示你输入密码了。
不过有个例外!如果远端服务器的用户名与密码相同,你使用密钥登录就不会成功


3、穿过代理服务器 ( 摘自 Open SSH Client 官方文档 )
ssh本身不能穿透代理服务器,需要配合其它的程序进行转发
在 fedora 中,检查是否已经安装了 nc ( netcat ),在 $HOME/.ssh/config 文件中增加一行

ProxyCommand nc -X connect -x 192.168.2.67:808 %h %p

如果你是使用SOCKS代理,则需要把上面的"connect"换成"4"或者"5",这个"4"或者"5"对应你的SOCKS代理的版本。

在Debian 3.2和Ubuntu 6.06中你可以使用connect-proxy程序来连接HTTP代理。首先得安装这个connect-proxy软件包,然后在 ~/.ssh/config 文件中增加类似这样的一行:

ProxyCommand connect-proxy -H 192.168.2.67:808 %h %p

如果你是使用SOCKS代理,则需要把上面的"-H"换成"-S"。

Mandriva 2006与Debian 3.2的情形类似,只是它的软件包和程序的名字都叫connect,作相应的修改就可以了。

( 我在 Ubuntu gutsy 下面穿透 http-proxy 成功 )


4、文件拷贝
如果服务器有ssh服务,就等于一条带加密的FTP传送带,可以进行文件拷贝了。
scp ./file1 user@server:path/file1
将当前目录下的 file1 文件复制到server主机的user用户下 path目录下
反之亦然,可以将远程文件复制到本地


5、挂载远程目录
如果服务器上开启了ssh服务,就可以将服务器上的目录挂载成本地目录,然后就可以直接用 cp / rm 之类的本地文件操作命令来操作远程文件,也能直接用 vi 等命令对远程文件进行编辑,跟操作本地文件一样方便。参考 http://www.pkblogs.com/binsos/2007/06/linux.html

没有评论: