分类: LINUX
2011-02-01 23:58:39
ssh与运维
整理一下工作来看过ssh相关的文章。是一篇大杂烩,把很多网上和书籍上收集到的信息汇总在一起。是一个知识整理的过程。
1. ssh常用命令与会话管理
1.1 常用命令
$ ssh root@192.168.1.153 -p 110 ##指定远程登录的ip,用户名,端口
第一次ssh远程连接机器时会提示:
The authenticity of host '192.168.1.153 (192.168.1.153)' can't be established.
RSA key fingerprint is 6a:......:54.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.153' (RSA) to the list of known hosts.
laowang@192.168.1.153's password:
并且会生成~/.ssh/known_hosts文件,每连接一台新的机器,都生成相应的RSA指纹(RSA key fingerprint),如下:
192.168.1.153 ssh-rsa ABC....==
有时候远程连接不上会类似提示如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
这时比较快的办法就是把~/.ssh/known_hosts删掉,或者把known_hosts下对应ip的那行去掉。或者,在《》的第12条,有提供一条命令来删除ssh主机信息:ssh-keygen -R
$ ssh 192.168.1.153 -p 3389 ## 不指定用户的话,就会以当前shell环境下的变量$USER作为登录用户账号
$ ssh –v laowang@192.168.1.153 ##调试ssh会话,很多命令中,v选项对应的英文是verbose,也就是详细的意思。
1.2 利用SSH退出符切换SSH会话
(参考:《linux 101 HACKS》哈工大中译版 第3章 SSH客户端命令)
a. 登入远程主机
Localhost$ ssh -l laowang 192.168.1.153
b. 已连接远程主机linux153
linux153$
c. 要临时回到本地主机,输入临时退出符号:”~” 或 “control + z”
d. 这时你已经退回本地主机,ssh远程会话就会在后台运行,可以用jobs查看它。
e. 用fg进行后台任务切换
linux153$ fg %1
1.3 端口转发
命令格式参考
$ ssh -L
应用场景:你在办公室的工作机是host1,你有服务器linux153(192.168.1.153)的某个账号laowang及密码,内网有关键DB服务器192.168.10.99(限定只接受来自linux153的远程数据库查询)。
在linux153使用账号laowang开启端口转发:
laowang@linux153$ ssh -g -L 50001:192.168.1.153:3306 192.168.10.99
通过这条命令就可以允许内网其他机器通过192.168.1.153的50001端口转发连接DB服务器的3306端口。
在host1上就可以利用linux153的50001的端口转发,来和10.99数据库testDB进行交互
user@host1$ mysql -h 192.168.1.153 -P 50001 -utest -p123456 testDB
很多数据库查询工具都带有SSH隧道功能,如SQLyog等。有时候为了隐藏服务器的ip和端口或者出于其他安全的考虑,做2次ssh端口转发,具体可以参考备注 ①。
注意,-R选项就是把右边的10.99的3306端口带到linux153的50001端口了。
$ ssh -g -R 50001:192.168.1.153:3306 192.168.10.99
-D选项建立socks代理服务,下面例子开放的是10001端口(详见备注 = 4 \* GB3 ①)
$ ssh -D 10001 192.168.1.153
用w命令就可以查看到端口转发的状态
[root@linux153 ~]# w
03:08:36 up 16 days, 7:48, 38 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
wangjx pts/1 192.168.3.15 01:26 19.00s 0.36s 0.00s ssh -R 50001:192.168.10.99:3306 192.168.1.153
root pts/2 192.168.3.91 13Jan11 3days 0.10s 0.10s -bash
1.4 会话管理(踢用户)
先用w查看登录用户信息,在用下面命令踢用户(多个用户)
pkill -kill -t pts/8,pts/10,pts/11 #备注②
或者 根据登录的用户名踢用户(未测试是否会影响以用户启动的系统服务,慎用)
pkill -KILL -u user1 #备注③
1.5 ssh别名 #备注 ④
a. 做ssh别名记录
$ mkdir ~/.ssh
$ vim ~/.ssh/config
Host linux153
HostName 192.168.1.153
Port 3389
User laowang
保存编辑:wq。快捷方式名为 lt,HostName为主机名或ip,Port为端口号,User 为用户名
b. 现在可以连接linux153
$ ssh linux153 ##等同与命令 ssh laowang@192.168.1.153 -p 3389
前面提到的端口转发也可以写成ssh别名 ( <
$ ssh –L 9001:localhost:21 jdoe@linux2
等同于下面的配置
$ vim ~/.ssh/config
Host linux2ftp
Hostname linux2
LocalForward 9001 localhost:21
$ ssh linux2ftp
LocalForward可以换成RemoteForward,类似于-R选项,大家可以自己试试。
2. ssh与服务器管理
目前ssh是unix和linux下,远程管理服务器的主流工具,但是ssh的交互性不强,比如在初始化ssh连接的时候总是要手动输入用户名和密码。针对这个问题,很多公司和团体都有不同的解决方案。一般是利用一些自动化的交互程序,来完成ssh的初始化连接,比如著名的expect,perl等等。作为运维,成百上千的服务器等待我们维护管理,而ssh提供了可靠的安全通道,如何通过ssh通道进行批量管理、自动化管理,如何高效地完成这些任务,是我们运维日常工作的重要内容。
这部分本人没有发言权。仅列一些文章给大家作参考。
Unix/Linux 系统自动化管理: 远程登录篇
/developerworks/cn/aix/library/0909_jinjh_unixlogin/
我写的自动ssh的程序 by 扶凯
sshpass
/anonymouslogin/blog/item/4dcf6064506453f8f7365432.html
备注:
1. 实战ssh端口转发
https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
2. Linux系统下强制踢掉登录用户
/edeed/blog/item/f54c6e06501b2e7502088185.html
3. Linux logout user or logoff user commands
4. SSH 使用技巧一则: 创建快捷方式
其他,
使用 SSH 建立安全通信信道
/developerworks/cn/aix/library/au-tunnelingssh/
Unix Toolbox - 中文版 -- ssh scp
25 条 SSH 命令和技巧
Ubuntu 下如何使用 SSH Tunneling Proxy ?
ssh登录慢 (ssh -v实例)
在脚本中使用ssh时的几个注意事项