4

使用iTerm2管理SSH服务器

 2 years ago
source link: https://www.javatang.com/archives/2021/11/29/13063392.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在Windows系统下,有一个非常强大的Xshell软件,以至于刚刚从Windows切换到Mac的人会苦苦寻找macOS系统下类似Xshell的软件。

macOS下类Xshell的软件


下面是几款我用过的macOS下类Xshell的软件:

  • electerm
    开源软件,跨平台,功能全面,支持SFTP和Zmodem,但不支持多标签,每次设置的时候简直是一场灾难,界面用起来非常不方便,用了几天就放弃了。
  • windterm
    开源软件,跨平台,功能全面,支持SFTP和Zmodem,不过其操作界面非常奇葩,用了几天实在是不习惯,遂放弃。另外看资料说有部分代码是闭源的,对数据安全敏感的同学不用尝试了。
  • Zen Term Lite
    这个是我在Mac App Store上找到的一款软件,使用习惯接近于Xshell,支持Zmodem。上面的是免费版的,还有一个收费版的:Zen Term,区别在于收费版的支持SFTP。这个是我用的时间最长的一款软件,如果要求不高的话免费版的足够的,不支持SFTP可以使用Zmodem传输文件,也非常方便。不够因为是完全闭源的,所以不同的人不同取舍了。
  • Termius
    这个是一个跨平台且功能强大的SSH客户端,商业软件,收费版的支持SFTP,但免费版的也足够了,最关键的是其手机版也非常好用,特别是一些打字操作,做了非常人性化的优化。不过一些操作习惯上不太适应,并且完全闭源,目前仅在手机上应急使用。

使用iTerm2管理


其实在macOS下可以使用iTerm2对远程服务器进行管理,开源软件,功能异常强大,并且使用起来也非常的易用和便捷。

使用Profiles管理多个SSH服务器

点击iTerm2-Preferences...+,),然后点击Profiles标签:
file

左边Profile Name列表中显示的第一个 ✭ Default 是iTerm默认的设置,下面自定义的Profile默认情况下都使用它的设置,也就是说后面需要设置针对所有Profile有效的项都时候可以在此进行设置,这一点非常重要。

点击+按钮新建一个Profile,在Name中输入服务器的别名,下面的Title我更喜欢选择Profile(Job),方便进行辨识。最关键的是下面的Command默认选择Login Shell,后面的Send text at start:中输入ssh登录命令。如下图:
file
我个人更喜欢给标签设置一个颜色,方便区分。
file

关闭设置对话框,点击Profiles - Open Profiles... 菜单( ⌘O),选中刚刚创建的服务器,回车就可以进入登录界面了。
file

自动登录服务器

每次都需要输入登录密码非常不方便,可以使用Profile的Triggers功能。进入 Preferences Profiles中,首先选中刚刚创建的Profile,然后点击右边的Advanced标签,在Triggers下面点击Edit按钮,
file

自动输入密码登录

点击+创建一条触发规则:

  • Regular Expression: 触发器的触发条件,支持正则表达式。因为每次需要输入密码的时候出现如[email protected]'s password:的文本,因此这里将条件设置为 's password:
  • Action: 选择动作条件,这里选择Send Text...,即直接向屏幕发送文本
  • Parameters: 动作参数,这里是发送的文本内容,输入密码,最后加上\r表示回车
  • Instant: 设置是否立即生效,勾选
  • Enabled: 是否启用,勾选

最后设置如下:
file

关闭设置, +O打开Profile选中服务器回车就回自动登录了,效果如下:
file

使用密码管理器登录

上面的方式有个最大的问题,就是服务器的密码暴露在外面了,非常不安全,可以使用iTerm2的Password Manager功能。点击Window - Password Manager菜单,打开Password Manager,点击+创建包含用户名密码的账号:
file

接下来再进入当前Profile的Triggers规则,将刚才那条触发器规则的Action 修改为 Open Password Manager...Parameters选中刚刚创建的账号,如下:
file
关闭设置, +O打开Profile选中服务器再次回车之后,自动弹出Password Manager并自动选中的对应的账号,这个时候再回车就可以自动登录了。

使用证书登录(推荐)

当然,最安全最好的方式是使用证书登录,详细设置参考macOS系统下SSH使用密钥远程登录Linux服务器这篇文章,Profile的Login Shell即可以是前面的用户名、ip和端口,也可以是Host别名。记得将上面的Trigger规则禁用。
不过上面介绍的Password Manager也有使用的场合,比如可以将规则设置为 su -,密码管理器里面存放root的密码,这样每次切换的时候就不需要输入root密码了。

使用Zmodem进行文件传输

Zmodem是一种文件传输协议,用于在客户端和服务端之间进行文件的上传/下载。

客户端设置

在macOS客户端同样需要使用 brew install lrzsz 命令安装 lrzsz 软件包,然后下载安装ZModem integration for iTerm 2

cd /usr/local/bin
wget -c https://github.com/robberphex/iTerm2-zmodem/raw/master/iterm2-recv-zmodem.sh https://github.com/robberphex/iTerm2-zmodem/raw/master/iterm2-send-zmodem.sh
chmod +x iterm2-*.sh

最后一步还需要在iTerm2中进行设置。打开Profiles设置,设置默认的✭ Default Profile中的Triggers,这样后面新建的所有Profile都自动包含里面的触发器规则。规则如下:

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

最后完成的规则如下所示:
file

服务端设置

在服务端可以使用rz(文件上传 - ZMODEM (Batch) file receive)和sz(文件下载 - ZMODEM file send)命令进行文件的上传和下载,前提是需要安装 lrzsz 软件包。

# Ubuntu 或 Debian
apt-get install lrzsz
# CentOS
yum install lrzsz -y

这样设置之后就可以正常使用rzsz命令了。文件开始传输的时候,右上角会出现一个传输中的图标:
file
当文件传输完成后图标消失,并提示 # Received <file>
file

不过上面的ZModem integration for iTerm 2脚本不能实时显示传输文件的进度,对于一些比较大的文件会比较痛苦。

使用iTerm2 shell intergration进行文件传输(推荐)

其实一种最强大便捷的文件传输方式是使用 iTerm2 shell intergration

安装iTerm2 shell intergration

安装非常简单,只需要先登录服务器端,执行如下命令:

curl -L https://iterm2.com/shell_integration/install_shell_integration.sh | bash
source ~/.iterm2_shell_integration.bash

也可以选择 iTerm2 - Install Shell Intergration 菜单,按照提示的步骤进行操作,最后不要忘记执行 source ~/.iterm2_shell_integration.bash 命令使其生效。

生效成功之后,当前登录的用户名最前面会出现一个向右的小三角,如下所示:
file

上传/下载文件

上传文件(可以上传多个文件或文件夹)

将需要上传的文件(支持多个)或文件夹选中,按住 (option) 键的同时拖动到iTerm2窗口,松开即可上传

这个时候会在iTerm2的菜单栏中多出了一个Uploads 项,会显示上传的文件、进度等等:
file

下载文件(只能下载单个文件,无法下载整个文件夹)

下载文件的话,只要在文件名上面右键,选择Download with scp from <server> 即可:
file

同时会在iTerm2的菜单栏中多出了一个Downloads 项,点开是正在下载的文件、进度和是否下载成功。
file
如果下载失败的话,还可以点击Get Info菜单项查看具体的错误原因。

上传/下载出现连接错误的处理

如果上传或下载的时候,出现如下"Connection failed: Could not connect."错误:
file

需要分析的是,iTerm2 shell intergration本质上依然是scp命令,问题的本质是无法找到对应的服务器,可以采用下面两种方式解决:

客户端设置与服务端相同hostname的SSH服务器别名

首先登录服务端,执行hostname命令查看服务器的hostname,可以通过 sudo hostnamectl set-hostname <new_host_name>命令设置新的hostname:
file

然后在客户端打开~/.ssh/config文件,添加SSH服务器别名:

# local centos7 server
Host local_centos7
  HostName 192.168.212.8
  Port 10022
  User mazy

注意:这里SSH服务器别名必须和服务端的hostname一致,点击这里查看参数的具体含义。

这样操作之后就可以正常上传/下载文件了。

在服务端设置iterm2_hostname环境变量

在服务器端将真实的ip和ssh端口设置在iterm2_hostname环境变量中,如下:

echo 'iterm2_hostname=192.168.212.8:10022' >> ~/.bash_profile
source ~/.bash_profile

注意:iTerm2 shell intergration本质上依然是scp命令,因此如果服务端设置了禁止root直接登录的话,在root账号下面上传/下载文件是失败的。

卸载iTerm2 shell intergration

卸载非常简单,首先执行rm -rf ~/.iterm2* 命令删除相关的文件,然后在 ~/.bash_profile 文件中删除下面的内容:

test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"
iterm2_hostname=192.168.212.8:10022

最后执行 source ~/.bash_profile ,重新登录账号,这个时候发现登录名最前面的向右三角箭头不见了,即说明卸载成功。

快捷Linux命令


在Windows的Xshell中还可以自定义发送命令的工具栏,可以将一些内容比较多的命令放在上面,非常方便。macOX中可以通过以下两种方法实现:

在iTerm2中创建快捷命令

自定义iTerm2的Snippets内容

打开iTerm2的Preferences界面,首先点击 Shortcuts标签,再点击 Snippets 标签点击左下角的 + 按钮,可以将命令行的内容添加进去,如下图所示:
file

最后的结果如下:
file
注意:可以发现最后有一个换行符,这样点击就可以立即执行命令。

自定义命令快捷键

Preferences窗口点击上面的 Keys 标签,在 Key Bindings 子标签下面,点击左下角的 + 按钮,可以自定义快捷键,Action 中选择 Send Snippet,然后选择前面创建的 Snippet,如下图所示:
file

自定义命令Touch Bar

依然在上面的 Key Bindings 子标签下面,点击右下角的Add Touch Bar Item按钮,设置Touch Bar标签的内容,其他设置同上:
file

接下来需要将上面的按钮添加到Touch Bar上面,点击iTerm2的View-Customize Touch Bar...菜单,可以发现刚才自定义的按钮已经出现了,将其拖到Touch Bar上面即可:
file

使用Alfred的Snippets

如果安装了Alfred的话,可以将一些常用的Linux命令放到Snippets里面,如下图所示:
file


参考资料:
三款优秀的替代Xshell的SSH软件
iTerm2使用小技巧-密码管理器
MAC下iterm2下命令行快捷键
Mac osx 下安装iTerm2,并使用rz sz上传下载
iTerm2 实现 ssh 自动登录,并使用 Zmodem 实现快速传输文件
Mac item2 使用 shell integration 完成文件上传下载
Shell Integration "Download": Custom SSH Port
How to Set or Change Hostname in Linux


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK