一些使SSH / SCP使用更方便的技巧
我猜我们很多人很大程度上依赖于ssh / scp访问/维护远程主机。 在这篇短文中,我想分享一些我对ssh / scp使用有用的经验。
首先让我们看看事情如何开始:
- 一开始: ssh 192.168.0.1
- 然后我们得到另一个主机,这次用不同的用户ID: ssh root@192.168.0.2
- 由于我们经常使用这些命令,反复键入ip地址并不是很有趣,所以让我们简单的说一下,把这些IP放到/ etc / hosts上,使用主机名而不是IP: ssh host1 。 ssh root @ host2
- 然后我们得到另一个主机来维护,这次用ssh的一个非标准端口: ssh -p 222 admin @ host3
- 嗯,它有点混乱,让我们简化一下:对于每个主机,我们有一个简单的脚本,所以我们不需要记住要连接的用户ID和端口。 我们把上面的命令放到ssh-host1 , ssh-host2和ssh-host3上 。 好的,现在我们可以享受shell的自动完成功能来访问这些主机,并忘记所有这些参数...
- 然后我们需要对这些主机进行一些操作:嗯,它再次变得混乱,让我们创建另一组脚本,用于scp ...
- 然后我们得到另一个主机
- 不难想象这将如何继续下去。
我使用一个简单的技巧来摆脱这个混乱:我有一个名为ssh-generic的简单脚本,如下所示:
#!/bin/bash port="22" case "$0" in *-host1) account="myid@192.168.0.1" ;; *-host2) account="root@192.168.0.2" ;; *-host3) account="admin@192.168.0.3" port="222" ;; *) echo "unsupported name: $0" exit 1 ;; esac case "$0" in */ssh-*) echo running ssh -p $port $account "$@" ssh -p $port $account "$@" ;; */scp-to-*) echo running scp -P $port "$@" $account: scp -P $port "$@" $account:$scpdir ;; */scp-from-*) echo scp -P $port $account:$1 . scp -P $port $account:$1 . ;;
*) echo "unsupported name: $0" exit 1 ;; esac
然后我将ssh-host1 , scp-to-host1和scp-from-host1作为符号链接到上述脚本(即ssh-generic)。 用法是微不足道的:
- 要ssh到host1: ssh-host1
- 将文件复制到host1: scp-to-host1 <filename>
- 从host1复制文件: scp-from-host1 <filename>
与host2和host3类似。 当我们得到另一个主机时,很容易编辑ssh-generic ,添加相关的条目并进行必要的符号链接。 例如,让我们添加一个ip 192.168.0.4的主机,ssh 2222的端口和用户id admin2。 我们想通过简单的说ssh-host4访问这个主机。 事实证明是容易的:
- 编辑ssh-generic并将以下行添加到正确的位置(作为读者的练习留下):
*-host4) account="admin2@192.168.0.4" port="2222" ;;
- 将ssh-host4 , scp-to-host4和scp-from-host4作为符号链接到ssh-generic
奖金是我们可以在命令行中说,例如ssh-host <Tab> ,以免自己记住主机名,连接细节,从而导致错误。 为了清晰起见,我从脚本中省略了一些化妆细节,例如在运行ssh / scp之前自动设置当前xshell的标题,或者在脚本中使用dryrun选项。
我还有一个可以用来缓解上传ssh密钥的配套脚本。 我命名为“enable-ssh”(有点不好选择的名字,应该重命名为更好的东西),它看起来如下:
if test -z "$1"; then echo Usage: $0 '[-p <port>] <host>' exit 1 fi if ! test -s $HOME/.ssh/id_rsa.pub; then ssh-keygen -t rsa fi cd cat $HOME/.ssh/id_rsa.pub | \ ssh "$@" "mkdir -p .ssh; touch .ssh/authorized_keys; cat >> .ssh/authorized_keys"
用法:
- 要将ssh密钥上传到具有标准端口和相同用户标识的主机: enable-ssh host1
- 将ssh密钥上传到具有非标准端口和不同用户标识的主机:
- 首先尝试ssh到该主机找出所需的参数(我们不想记住我们已经写下的任何东西,不是吗?): ssh-host4
- 上述注释将写入用于连接到host4的命令: 运行ssh -p 2222 admin2@192.168.0.4
- 运行在另一个终端: enable-ssh -p 2222 admin2@192.168.0.4
而已。 我希望你觉得这很有用。