使用ssh时的一些骚操作

2021-01-22 10:45:57 134

简介

ssh相信是在平时使用的非常多的一款工具了,不管是在哪个平台上,当我们需要连接到远程服务器的时候,那么通过ssh那是十分方便的一种方式。本文介绍几种'骚操作',让你在使用ssh时候如虎添翼。

基本使用

在Windows平台上,可以使用免费的putty工具来进行ssh连接,同时也有其他功能更加强大的收费工具,比如XShell等等。这些工具都具有可视化界面,具体使用方法这里就不再累述。

在Linux或者MacOS平台上,在终端中使用下面的命令就能很简单的连接远程主机了。

ssh hostName@hostIP 

配置ssh命令别称

在Linux发行版或者MacOS系统中,默认的都会在系统中安装bash工具,工具一般位于/usr/bin/bash。通过<kbd>Ctrl+Shift+T</kbd>组合按键可以来打开终端工具,在每次打开终端时,都会去加载/home/username/.bashrc文件中的配置,查看.bashrc文件中的内容如下图

.bashrc

在上图中可以看到很多alias翻译过来的意思就是别名,比如

  • alias ll='ls -alF'

  • alias la='ls -A'

在终端中我们使用ll就是执行了ls -alF命令,执行la就相当于执行了ls -A的命令。因此也可以将我们常用的命令配置成别名的方式,使用下面的方式配置ssh别名

sudo vim ~/.bashrc
# 在文件内容末尾输入下面的内容
alias stx='ssh ubuntu@hostIP  -p 22'

其中hostIP就是你需要连接的远程主机的公网IP地址,退出保存,执行如下命令

source ~/.bashrc

注意修改完了~/.bashrc文件之后,一定要记得执行source命令,不然不会生效,当然你也可以重新开启一个终端窗口。然后在终端中输入stx命令就可以连接你的远程主机了,输入密码就可以进入你的远程主机了。如果你有经常需要连接的远程主机,使用该方式可以省去我们每次都需要输入远程主机名跟IP了,大大提高工作效率。

sshpass工具

上面的方法确实可以节省我们输入远程主机名以及IP地址的时间,但是有一个问题是我们每次都需要输入远程主机的登录密码,那么有没有一种方式让我们省去输入密码步骤呢?答案是肯定的,我们可以通过sshpass工具将登录密码直接附加上登录命令中。首先我们通过下面的命令来安装sshpass工具

sudo apt-get install sshpass

之后可以通过下面的命令测试是否可用

sshpass -p password ssh -p 22 hostName@hostIP

测试成功之后就可以按照方法一一样将该命令配置一个别名,然后在命令行中输入sptx就可以免去密码直接登录远程主机了。

sudo vim ~/.bashrc
alias sptx='sshpass -p password ssh -p 22 hostName@hostIP'

sshpass

SSH-key 免密登录

上面的方式其实算不上真正的免密登录,我们只是把登录密码使用其他工具附加到登录命令中了。那怎么真正的实现免密登录呢?我们可以通过ssh-key来实现这一需求。

  • 在本机生成ssh-key

    首先查看本机是否已经生成了ssh-key。

    cd ~/.ssh
    ls | grep id

    如果存在,则可以省去下面这个步骤。如果不存在,则使用下面的命令生成本机秘钥。

    ssh-keygen -t rsa

    一路回车就生成了本机的ssh秘钥了。其中id_rsa为私钥,id_rsa.pub为公钥,我们将公钥拷贝到远程主机中

    scp ~/.ssh/id_rsa.pub hostName@hoatIP

    在远程主机中将客户端的公钥写入~/.ssh/authorized_keys文件中

    cat id_rsa.pub >> ~/.ssh/authorized_keys
  • 客户端配置
    虽然这样子配置之后可以免密登录,但是每次还是需要输入远程主机名、IP等等。可以通过客户端的~/.ssh/config配置服务器的相关参数简化登录命令。
    sudo vim ~/.ssh/config
    # 填入下面的内容在文件结尾
    Host Servername
             HostName IP
             Port 22
             User hostName
             IdentityFile ~/.ssh/id_rsa

    然后在终端中使用你配置的Servername就可以登录远程主机了。

    ssh Servername

    当然我们也可以根据方法一配置别名使得命令更加简短,这里就不再做出说明了。