xshell最佳实践
2013-04-22 14:51:23

XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是平常使用不可缺少的工具。使用了多个年头,总结一些很实用的技巧,与大家共分享。

复制和粘贴
将当前Shell中的内容复制到"记事本"中
日志记录
快速选择当前行
快速打开Sessions对话框
迁移连接信息
最小化到系统托盘
退出时关闭确认对话框
快速切换打开的Tab
数字小键盘输入
自定义文字颜色
设置命令快捷按钮
将命令发送到多个ssh会话终端
设置xshell使用代理
上传下载
中文乱码的解决
用密钥登录
显示远程服务器的图形界面
Xshell及Xftp登录时报'找不到匹配的outgoing encryption算法'错误
修改及导入Xshell配色方案


复制和粘贴
由于在linux的Shell下,Ctrl+c是中断当前指令,这个快捷键和win系统下的复制快捷键冲突,在Xshell中,提供了其它的快捷键来执行这些操作:
复制:Ctrl+Insert
粘贴:Shift+Insert
 
Xshell的复制和粘贴比较强大,但是默认不支持Ctrl+Shift+C和Ctrl+Shift+V,实际上Xshell支持自定义功能键,在Key Mapping当中点击New...然后输入Ctrl+Shift+C,然后在弹出的Edit对话框当中的Function中选择Menu,在Action中选择Copy,同理Ctrl+Shift+V也一样设置即可,其实还有很多快捷键可供选择,且可以自定义。

粘贴还有一个键就是鼠标中键,另外你还可以设置点鼠标右键就是粘贴,设置选项在这:
Tool->Options->General->Mouse
Xshell:Tool->Options->Keyboard and Mouse->Mouse
Middle-button:设置粘贴(默认)、弹出右键菜单、弹出当前连接的属性设置窗口
Right-button:弹出右键菜单(默认)、弹出当前连接的属性设置窗口
 
这里可以选择设置中键或右键的具体功能,如设置用鼠标右键可将粘贴板内容复制到终端,像putty那样。另外按下鼠标滚轮可以实现将已经复制的内容快速粘贴。

将当前Shell中的内容复制到"记事本"中
有时候需要把shell中的一些内容临时复制到"记事本"中,如果再打开一个记事本,再复制粘贴就显得麻烦了。

XShell中内置了这一功能,使用很简单,就是选中内容,鼠标右键,选择"To Notepad",再选中'Select Area'或者'All'或者'Screen',前者将把前面整个屏幕的输出复制到记事本中,而后者只会将当前可见的部分复制。

日志记录
设置好一个登陆会话之后,选择属性然后在弹开的窗口当中选择'高级->日志记录',然后在'日志选项'勾选Start logging upon connection并选择记录方式,然后在'日志文件'中选择'使用以下文件'。


在日志文件中选择要记录session的路径,如果勾选'Overwrite when the specified file aleardy exists'的话则会覆盖之前的日志,但是如果日志带了%t参数也就无所谓了,这个参数是名称精确到秒,如果不是极端条件也覆盖不到。还有一个选项是'启动会话日志记录时询问',这个是在会话连结的时候提示你把日志存放在那个路径,建议直接用前面一个省心不少。

快速选择当前行
这个很简单,就是在shell界面下快速点三次鼠标就选中当前行了,这样就可以用上面的复制功能将其复制到剪贴板中。

快速打开Sessions对话框
有时候打开XShell后希望能直接打开Sessions对话框,这时候只要在Shell界面的(要打开'Address Bar'选项)的地址栏 里中输入'open'即可。或直接使用'Alt+O'即可打开上次打开的Sessions所在目录的对话框。

迁移连接信息
在XShel中,每个保存的Session连接信息都是保存到.xsh(就是ini文件,可以用文本编辑器打开)文件中的。它的默认路径是
"%APPDATA%\NetSarang\Xshell\Sessions"

即:C:\Users\用户名\AppData\Roaming\NetSarang\Xshell\Sessions

可直接拷贝这些xsh文件到新的xshell的相同目录即可使用。

最小化到系统托盘
XShell默认最小化是不会到系统托盘的,但是有个选项可以修改,设置在:Tools->Options->Advanced->'Minimize to system tray'打钩即可,尽管这并不是很实用。

退出时关闭确认对话框
选择在这:Tools->Options->Advanced->'Confirm connection close when session exits'
还有一个:Tools->Options->Advanced->'Confirm connection close when XShell exits'

快速切换打开的Tab
快捷键:Alt+1~9 或者Ctrl+Tab 或者Shift+Tab

设置:Tools->Options->'Menu & Short Keys'

数字小键盘输入
如果不设置的话,输入数字小键盘,会显示乱码。

属性页面'Properties'->Terminal->'Initial VT Modes'->'Set as normal'选择即可。


自定义文字颜色
如图设置,就可以得到多种颜色的文字字体。


设置命令快捷按钮
当你管理操作多个ssh主机时,不得不重复输入相同的命令,xshell可以设置快捷按钮,一键输入你设置的命令。


Tools->'Quick Command Sets...'

在将其添加好后,将'View'->'Quick Commands'选项打开,这样在xshell的底部就有它们的标签,点击它后将会在终端里执行。

这里加一个别名为'nsl'的命令执行:


将命令发送到多个ssh会话终端
也就是发送同一命令到已经登陆的多个主机,回车会将自动执行。这样就省去了重复键入的工作,提高了操作效率,但前者是要知道在做什么。

打开相应的功能:选择View->'Compose Bar',这样在xshell的底部会有一个输入框,可以在其中录入想要执行的命令及其参数;最左端的小箭头点开后还可以设置将框内的指令发送到到当前xshell所有的会话(To All Sessions)还是所有的xshell(To All Xshell),默认为当前所有会话,当前你也可以只针对当前这一个会话(To Current Session),仅为调试所用。


注意:xshell可以开启多个实例,一个实例又可以开启多个tab会话。

设置xshell使用代理
详情请参考:对xshell三种端口转发的认识

上传下载
在主机里安装rz、sz,就可以直接上传下载文件,不用sftp或者其他上传下载工具了。这对于下载上传小型文件非常方便,。
通过apt来安装:
apt-get install lrzsz

用法:
# sz 文件名
即可下载文件到本地。

# rz
就会跳出窗口让你选择上传的文件,然后上传。

个人更喜欢用sftp工具,通过Ctrl+Alt+F可以调出该sftp工具,如果安装了xsftp工具,将弹出一个gui类型像ftp工具一样可操作,否则将会出现cmd的操作界面。




中文乱码的解决

这个问题与几个方面有关:ssh连接工具编码、当前会话的locale、应用软件输出的编码。只有这三个地方的编码设置为一样或兼容时,才能正常显示。


查看当前用户的locale


Linux下修改用户locale

下列以mysql编码调整为例,查看mysql这个应用的会话编码:


会话使用的是gbk的编码,如果所查询的库表不是以会话中所显示的编码,则需要修改当前的会话编码:mysql>set names gbk;

修改后,查询出来的结果就应该是正常的,当然这需要终端和系统会话的支持,下面是连接工具的编码是utf-8,但系统的编码是“en_US.ISO8859-1”时通过对gbk的数据库查询出来的结果:


修改当前shell环境的语言编码为utf8时:
$ export LC_ALL="en_US.utf8"

查看出来的结果依然是无法正常显示的:


修改为:export LC_ALL="zh_CN.utf8",结果还是一样,改为gbk后也是如此。那么可能是问题就是连接工具的编码设置的问题了,将其从utf8改为'Chinese Simplied(GBK)',系统级的编码也为gbk时,查询的结果是正常的。如果将系统级的改为'utf8'(zh_CN或en_US)时,查询结果都是能正常显示的。

目前中文编码兼容性最好的是gb18030,不过出于很多原因,gbk是广泛使用的中文编码(windows中文环境的默认编码),而gb2312比较老旧了。可以修改整个系统的为支持中文默认的编码。
# vi i18n #加入以下内容
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"

用密钥登录
如果不想每次在登录ssh时都输入密码(当然你也可以保存密码,保存后也是安全的,无法反解),可以设置使用ssh auto login方式,这种方法在linux之间登录是非常常见了,在xshell中也可以使用这种方式。在一定程序可防止他人的对ssh服务器通过暴力穷举来登录服务器,相比于密码方式要安全一些,前提是这个key一定要做好保密,当然可以对这个key设置一个统一的密码,省去为不同的机器设置不同密码。


在选择好密钥类型和长度后,直接下一步继续,保存文件,最终Key生成结束。

把生成的key内容直接写到(追加)被登录机器的该用户家目录的'.ssh'下 /home/user/.ssh/authorized_keys 文件中。


初次需要导入刚才保存的 Key,必须将其导入到xshell中,才能为主机登录时有可选的密钥。


输入密码,如果有的话。

关于sshd服务器的认证配置

# 口令认证
PasswordAuthentication yes #使用口令认证
PubkeyAuthentication no #不使用非对称密钥认证
PermitEmptyPasswords no #不允许使用空密码的用户登录

#非对称密钥认证
PasswordAuthentication no #不使用口令认证
PubkeyAuthentication yes #使用非对称密钥认证
UsePam no #yes的话非对称密钥验证失败,仍然可用口令登录
AuthorizedKeysFile .ssh/authorized_keys #用户认证使用的公钥。

显示远程服务器的图形界面

想在xshell下,将远程机器上的gui界面显示出来,就需要安装Xmanager或其套件。

SSH客户端开启X转发,Xshell设置如下:
使用XShell建立连接时,设置连接属性,在 SSH -->tunneling(隧道)选项下勾选 Forward X11 connections to(转发X11连接到): Xmanager。


设置成功后,登陆远端Linux主机,执行带gui的应用看其是否可以将界面显示在本地窗口上。这样设置成功后,就可以运行有图形界面的工具并将其显示在本地机器上。

先安装X Window环境:
yum groupinstall "X Window System"

配置SSH(/etc/ssh/sshd_config)开启X转发:
X11Forwarding yes

配置好上述要求后,就基本了没有问题,下图是在本地打开了远程机器上的Virtualbox主界面。


如果想将整个桌面应用全部显示,则在远程主机可对桌面管理进程的配件文件(gdm.conf、kdm.conf)进行修改。

配置 XDM

(1). Change runlevel to 5
id:5:initdefault:
修改 /etc/inittab,将运行级别设置为5,即:
id:5:initdefault:

(2). Enable XDMCP
修改 /etc/gdm/custom.conf,

将 [xdmcp] 部分的 Enable 设置为 1,即:
[xdmcp]
 Enable=1
 Post=177
将 [security] 部分的 DisallowTCP 设置为 false,即:
[security]
 DisallowTCP=false

然后重启桌面:gdm-restart,另外在系统防火墙中也要注意设置。

Xshell及Xftp登录时报'找不到匹配的outgoing encryption算法'错误

在用xshell 4连接debian 7出现上述错误提示,之前使用xshell 5没有报出此提示,总结大致有两个原因:
1、升级过ssh的相关依赖组件(openssl)、或openssh的版本。远端的ssh服务升级后,其对应的加密算法均作了升级、修改,而本地的缓存安全信息并无更新,从而导致无法正常登录。


升级openssh后,出现Xshell登陆时报错:找不到匹配的outgoing encryption算法[中文版本]
或者:No matching outgoing encryption algorithm found[英文版本]

2、xshell的版本过低,没有内置或开启对应的加密算法。


将那些与aes*相关的加密算法选上,就能基本上解决这个问题了。如果找不到这几个选项,说明你要升级Xshell了。对于Xftp,点菜单"文件"—>"属性"—>设置—>编辑加密算法,将aes相关的选项勾上。下面的MAC可视情况决定是否勾选。

修改及导入Xshell配色方案

Xshell自带的配色方案中让人能看的没有几种,这里提供一个方案,供大家参考,这里仿的是ubuntu的终端风格。

ubuntu.xcs

[ubuntu]
text(bold)=ffffff
magenta(bold)=ad7fa8
text=ffffff
white(bold)=eeeeec
green=4e9a07
red(bold)=ef2929
green(bold)=8ae235
black(bold)=555754
red=cc0000
blue=3465a4
black=000000
blue(bold)=729fcf
yellow(bold)=fce94f
cyan(bold)=34e2e2
yellow=c4a001
magenta=75507b
background=300a24
white=d3d7cf
cyan=06989a
[Names]
count=1
name0=ubuntu

我们只需要复制且保存为对应的.xcs文件后缀名称就可以。

配色方案有了,我们现在开始导入了。


在弹出的“选择配色方案”的对话框中,点击“导入(I)”,在弹出的选择框中选择刚才保存好的配色文件,点击“打开”后完成。


也可以针对某些连接会话使用不同的配色,在该标签会话窗口中按"Alt+P",在”外观“页中的”字体和颜色“中可以选择相应的配色方案,还可以对该会话指定字体及其大小等。


该文章最后由 阿炯 于 2017-06-19 14:51:03 更新,目前是第 3 版。