Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29307428
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-03-30 21:08:11

(1) 运行远程主机的命令

一般情况下,我们使用ssh登录到远程主机,然后在远程主机上运行命令。有时候我们希望直接运行远程主机的命令,而不用登录到远程主机。这时候可采 用ssh的如下用法:

ssh remote-host command options

比如,

$ ssh 192.168.1.100 uptime[这个命令经常会用到哦~!]
20:01:02 up 94 days, 8:41, 0 users, load average: 0.00, 0.00, 0.00

更一般地,可以写一个脚本程序ssh-to:

#!/bin/sh

ssh `basename $0` $*

然后,

$ ln -s ssh-to myserver1
$ ln -s ssh-to myserver2
$ ln -s ssh-to myserver2

这样就可以直接运行远程机器的命令了,比如:

$ myserver1 uptime
$ myserver2 cat /etc/syslog.conf
$ myserver3 /usr/local/apachectl restart

(2) 传送文件

scp是基于ssh协议的安全文件拷贝工具,基本用法为:[SSH是一种比较安全的网络协议]

scp [[user@]host1:]file1 ... [[user@]host2:]file2

比如,

$ scp httpd.conf 192.168.1.100:/usr/local/apache/conf

同类的命令还有sftp。

(3) 无验证登录

每次我们登录到远程主机时,都要输入密码,太麻烦了。我们可以通过公匙/私匙对来避免这个过程。
假设当前所用的机器是m1,远程有一台机器m2,我们的目标是从m1登入m2避免口令输入过程。

首先,我们创建公匙/私匙对。

[yingyuan@m1 yingyuan]$ ssh-keygen -t rsa
Enter file in which to save the key (/home/yingyuan/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/yingyuan/.ssh/id_rsa.
Your public key has been saved in /home/yingyuan/.ssh/id_rsa.pub.
The key fingerprint is:
ca:68:19:50:34:05:97:88:49:c2:8b:74:23:ce:1e:05 yingyuan@m1

如果是DSA密匙则指定 -t dsa,在每次提示的时候直接回车就可以了。

然后,我们把公匙直拷贝到m2所在的机器。

 $ ssh m2 "mkdir .ssh; chmod 0700 .ssh"
scp .ssh/id_rsa.pub m1:.ssh/authorized_keys2

现在你就可以直接从m1登录到m2了。

(4) 网络漫游

继续(3)的话题,有时候,你需要从m1登录到m2,假设还有一台机器m3,你也要登录。可以用同样的方式处理,使得从m1登录到m2也可以不用输 入口令。但是问题在于,从m2登录到m3怎么办呢?如果管理的机器更多,就更麻烦了,机器之间登入和登出会花费更多的时间。

让我们感谢openssh,给了我们提供网络漫游的工具:ssh-agent。
我们的私匙保存在m1,公匙保存在m2和m3。首先我们配置m1。

$ eval `ssh-agent`
$ ssh-add
$ vi ~/.ssh/config
ForwardAgent yes

我们运行ssh-agent这个服务进程,然后配置ssh,使得可以转发代理。然后我们配置m2和m3,编辑配置文件~/.ssh/config, 使得可以转发代理。

$ vi ~/.ssh/config
ForwardAgent yes

现在你可以在m1,m2,m3之间来回登录了。你也可以不用配置ssh,直接指定-A参数具有同样的效果。

(5) 端口转发

有些协议是没有安全保障的,比如http,smtp。如果我们通过ssh端口转发,让这些数据走ssh的隧道,就安全多了。

比如,

$ ssh -f -N -L110:mailhost:110 -l user mailhost

-f 后台运行ssh
-N 只转发而不在远程运行命令
-l user 指定用户名称

把本地端口110的数据,转发到mailhost的110端口。这样你可以设置本地的MUA软件,让发往mailhost的地址发到本地端口 110,由远程ssh服务器再转发到目的地。

如果你已经登入到mailhost,则可敲入~C进入SSH快速设置,然后指定选项:

[yingyuan@m1 yingyuan]$ ~C
ssh> -L9000:localhost:110
Forwarding port.

-g选项允许其他远程客户连接到转发端口,例如登入到一台作为私有网络的NAT服务器,运行如下命令:

$ ssh -f -g -N -L8000:localhost:80 10.42.4.6

再举一个例子,我们希望m1转发8080端口到m3,再由m3转发到m2的80端口。

$ ssh -f -N -L8080:m2:80 m1

如果你用tcpdum在m3跟踪一下就会发现数据成功转发到了m2。

[root@m3 yingyuan]# tcpdump -i eth0 dst port 80
tcpdump: listening on eth0
21:26:20.960174 61.172.207.31.33024 > 61.172.207.32.http: S 1292936909:1292936909(0)
win 5840 (DF)
21:26:20.960316 61.172.207.31.33024 > 61.172.207.32.http: . ack 473167213 win 5840
(DF)
...


补充:
所有使用 OpenSSH 工具的通讯,包括口令,都会被加密。 telnet 和 ftp
使用纯文本口令,并被明文发送。这些信息可能会被截取,口令可能会被检索,然后未经授权的人员
可能会使用截取的口令登录进你的系统而对你的系统造成危害。你应该尽可能地使用 OpenSSH 的工具
集合来避免这些安全问题。

[使用包装的openssh 工具作通讯能够对口令进行安全加密。如果直接使用ftp登录的话中间的密码是会作为明文
传输的。所以尽可能使用支持openssh的工具进行服务器管理用!]


 
阅读(967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~