一些提示使SSH / SCP使用更方便

一些使SSH / SCP使用更方便的技巧

我猜我们很多人很大程度上依赖于ssh / scp访问/维护远程主机。 在这篇短文中,我想分享一些我对ssh / scp使用有用的经验。

首先让我们看看事情如何开始:

  • 一开始: ssh 192.168.0.1
  • 然后我们得到另一个主机,这次用不同的用户ID: ssh root@192.168.0.2
  • 由于我们经常使用这些命令,反复键入ip地址并不是很有趣,所以让我们简单的说一下,把这些IP放到/ etc / hosts上,使用主机名而不是IP: ssh host1ssh root @ host2
  • 然后我们得到另一个主机来维护,这次用ssh的一个非标准端口: ssh -p 222 admin @ host3
  • 嗯,它有点混乱,让我们简化一下:对于每个主机,我们有一个简单的脚本,所以我们不需要记住要连接的用户ID和端口。 我们把上面的命令放到ssh-host1ssh-host2ssh-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-host1scp-to-host1scp-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-host4scp-to-host4scp-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

而已。 我希望你觉得这很有用。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏