将Mac上的iterm改造成类似于SecureCRT/Xshell的ssh登录管理器

栏目: 服务器 · 发布时间: 5年前

内容简介:在MAC上的SSH客户端工具中记录过iterm的一些用法,这它们抽出来单独作为一篇,同时补充一些内容。SecureCRT是有Mac版本的,不过是收费的,体验上感觉凑合,免费的Xshell在Windows上也特别好用,但是没有找到它的Mac版。SecureCRT和Xshell的最常用的功能其实就下面三个:

说明

在MAC上的SSH客户端 工具 中记录过iterm的一些用法,这它们抽出来单独作为一篇,同时补充一些内容。

SecureCRT是有Mac版本的,不过是收费的,体验上感觉凑合,免费的Xshell在Windows上也特别好用,但是没有找到它的Mac版。

SecureCRT和Xshell的最常用的功能其实就下面三个:

  1. 保存目标机器地址以及登录密码等
  2. Session窗口的Clone,可以直接clone当前登录的session,不需要再次登录
  3. 用sz/rz命令快速的上传、下载文件

这三个功能用item都可以实现,并且体验很好。

实现登录地址保存

详细的配置过程见:[Mac的iterm保存ssh登陆信息方法,类似SecureCRT][4]

可以为每个远程地址创建一个profile,通过切换profile直接登陆对应的地址。

如果要自动用密码登陆,可以创建一个可执行脚本iterm_login.sh :

#!/usr/bin/expect -f

set timeout 30
spawn ssh -p [lindex $argv 0] [lindex $argv 1]
expect {
        "(yes/no)?"
        {send "yes\n";exp_continue}
        "password:"
        {send "[lindex $argv 2]\n"}
        "Last login"
        {interact}
}
interact

注意在mac上使用这个expect脚本会使后面提到的rz/sz命令失效,怎样避免?见后面关于rz/sz的一章。

然后将profile中的Command命令设置为

/Users/lijiao/Bin/iterm_login.sh 22 root@10.39.1.217 12345

三个参数分别为:端口、用户名@地址、登陆密码。

上面的脚本只是一个例子,可以根据需要灵活编写自己的脚本。

实现Session Clone

MAC下iterm2 实现clone session

~/.ssh 目录中创建一个config文件,输入如下内容:

host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

这样之后,只有第一次登陆时需要输入密码,打开新窗口登陆同一个地址,会直接复用已经有的session,不需要再次连接、输入密码等。

~/.ssh/目录下会生成一个名称样式为master-*的sock文件。它是当前的会话session。

ssh_config

实现rz/sz上传下载文件

方法1:ssh + lrzsz

在Mac上安装lrzsz:

brew install lrzsz

下载 ZModem integration for iTerm 2 提供的脚本:

wget https://raw.githubusercontent.com/mmastrac/iterm2-zmodem/master/iterm2-recv-zmodem.sh
wget https://raw.githubusercontent.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh
chmod +x *.sh
mv iterm2*.sh /usr/local/bin/

到iterm的”Preferences->Profiles->Advanced->Triggers”中添加下面两个trigger:

Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

这种方式直接将rz/sz与item关联起来了,可以在item中直接使用rz/sz命令,并且会自动在mac上打开文件窗口,便于选取要发送的文件和选择接收文件的存放路径。

但是这种方法有一个问题,如果使用expect登录的,rz和sz命令会无响应。

Github Issuer: Does not work w/ expect , tmux , screen , etc…

方法2:zssh + lrzsz

在Mac上安装lrzsz:

brew install lrzsz

在Mac上安装zssh:

brew install zssh

zssh (Zmodem SSH) 是一个自身支持rz/sz的shell:

zssh (Zmodem SSH) is a program for interactively transferring files to a remote machine while using the secure  shell (ssh).  
It  is intended to be a convenient alternative to scp , allowing to transfer files without  having  to  open another session and re-authenticate oneself.

然后用下面的脚本替换 实现登录地址保存 中用到的iterm_login.sh脚本:

#!/bin/bash
# Usage:   iterm_login.sh  PORT  USER  PASSWORD
# Example: iterm_login.sh  22   lijiao@192.168.88.2  123456

PATH=$PATH:/usr/local/bin

cat >/tmp/expect.sh << XXX
#!/usr/bin/expect -f
set timeout 30

spawn zssh -p [lindex \$argv 0] [lindex \$argv 1]
expect {
        "(yes/no)?"
        {send "yes\n";exp_continue}
        "password:"
        {send "[lindex $argv 2]\n"}
        "Last login"
        {interact}
}
interact
XXX

chmod +x /tmp/expect.sh
/tmp/expect.sh $*

这里的iterm_login.sh脚本实质就是将原先的expect脚本封装了一次,将登录命令由 ssh 换成了 zssh

要把expect脚本封装一次,是因为profile中的 shell 命令执行时,变量PATH中不包含/usr/local/bin/目录,会导致找不到zssh命令,以及在进入zssh的传输模式后,找不到rz/sz命令,如下:

$
zssh > rz
error: execvp rz

没有找到设置profile中的PATH变量的方法,所以用一个bash脚本封装了一下, 纯粹是为了加上 PATH=$PATH:/usr/local/bin ,进行曲线救国。

上传文件操作过程:

[192.168.88.11 ~]
$                         << -- 在当前登录的服务器的shell中直接键入`ctrl+2`,进入传输模式
zssh > ls                 << -- 传输模式中,ls命令看到的是mac本地的文件:
Applications            Documents            Library                Pictures     
CLionProjects            Downloads            Movies                Public                cpu_busy.json
zssh > sz cpu_busy.json   << -- 直接用sz命令将本地文件发送到当前登录的服务器
^XB00000000000000rz waiting to receive.Sending: cpu_busy.json
Bytes Sent:  16077   BPS:1220

Transfer complete
rz[192.168.88.11 ~]       << -- 文件发送完成
$
$ ls
cpu_busy.json  cpu_busy.json.bak  ssh.sh

下载文件操作过程:

[192.168.88.11 ~]
$ sz cpu_busy.json.bak     << -- 在当前登录的服务器中用sz命令发送要下载的文件
Š*B00000000000000
zssh > cd Desktop          << -- 键入`ctrl+2`进入传输模式后,进入要存放下载的文件的目录
zssh > rz                  << -- 输入rz开始接收文件
rz waiting to receive.Retry 0: Got TIMEOUT
Receiving: cpu_busy.json.bak
Bytes received:   16077/  16077   BPS:816138

Transfer complete
*CÝQ¢3cpu_busy.json.bak16077 13417762337 100644 0 1 16077k‹×øL
$

在Mac的Desktop目录中可以找到刚下载的文件。

参考

  1. MAC上的SSH客户端工具
  2. zssh (Zmodem SSH)

本文 原创首发 于网站:www.lijiaocn.com


以上所述就是小编给大家介绍的《将Mac上的iterm改造成类似于SecureCRT/Xshell的ssh登录管理器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

剑指Offer

剑指Offer

何海涛 / 电子工业出版社 / 2014-6-1 / CNY 55.00

《剑指Offer——名企面试官精讲典型编程题(纪念版)》是为纪念本书英文版全球发行而推出的特殊版本,在原版基础上新增大量本书英文版中的精选题目,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。全书分为8章,主要包括面试流程:讨论面试每一环节需要注意的问题;面试需要的基础知识:从编程语言、数据结构及算法三方面总结程序员面试知识点;高质量代码:讨论影响代码质量的3个要素(规范性......一起来看看 《剑指Offer》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具