ssh是基本的访问远程服务器的指令

在很多情景下都要用设备连接服务器进行开发,只需要几个简单的跨平台shell工具:sshscpopenvpn,就可以完成多数常见的远程开发任务。SSH协议也被用于其他访问远程服务的情境中,如对github上的代码进行提交与拉取,本文也将一并讨论。

标题:OpenSSH工具访问服务器进行远程开发

SSH协议

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接

OpenSSHSSH协议的开源实现。它里面包含了sshscp等组件,可以实现常用的访问服务器的功能

ssh提供shell

  1. 需要一条简单的ssh指令就可以链接目标设备,并提供一个可以操控它的shell

    ssh [username]@[ip] -p 22
    
    • 注意,ip对应设备的公网ip或者当前网络可见的内网ip
    • 一般地,系统的初始usernameroot,也可以用已经创建的其他用户
    • -p标的了提供ssh服务的端口,默认为22号
  2. 网络连通的情况下,一般会要求确认目标机器的安全性,然后输入该用户的密码,密码正确则连接成功

  3. 连接成功后,shell prompt会变更为该用户访问目标设备的样式。可以理解为:目标设备为登录的该用户启动了一个shell,而且当前shell的输入会最终重定向至目标设备的shell输入,目标设备的shell输出也会最终重定向到当前设备的shell输出。

  4. 如果要退出当前链接会话(session),输入exit,则目标设备会关闭这个shell进程,如果这是本链接的最后一个shellssh也会中止这一链接会话

  5. 接下来,使用这个shell,就可以像面前的设备一样操作链接的设备了!

scp负责文件传输

  1. 网络连通的情况下,同样只需要一条简单的scp指令就可以同目标设备互传文件

    scp [sourcedir] [destinationdir]
    

    这里的两个location:如果是本地的文件路径,就可以直接输入;如果是目标设备的文件路径,就要按照下面的格式:

    [username]@[ip]:[dir]
    

    该格式中的usernameipssh指令一致;dir书写目标设备的文件路径即可

  2. 确认该指令后,可以看到传输的进度条

  3. 有很多该指令衍生的工具,如win10WinSCP,可以像本地的文件资源管理器一样用鼠标操控文件的传输

openvpn连通网络

有时服务器不方便在公网上直接被访问,可以配置证书,使用证书通过openvpn来接入内网,从而通过内网ip访问服务器。

在服务端的配置以及证书的生成具体可以参考这篇教程;更多情况下,我们要作为客户端使用openvpn连接到内网,因此使用包管理安装openvpn,找到管理员分配的证书(certs),将证书目录下的文件放到特定的目录,win10GUIopenvpn可以指定任意目录下的证书,linux下一般放/etc/openvpn/client/目录中,保存好证书后,启动openvpn进行链接。

如果使用CLI,则命令为:

sudo openvpn [certdir]/config.ovpn

接下来看提示是否连接成功,就可以使用上文的工具访问内网服务器了

注意:很多vpn的全局模式会破坏openvpn的链接

使用SSH协议访问github

github可以理解为用于托管代码的服务器。虽然它不支持直接使用shell进行操控,但它可以通过ssh key来认证具体的设备,从而在本地上传提交到github的时候,跳过输入用户名和Personal Access Token的环节,大幅简化操作

  1. 首先在本地生成ssh key

    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    其中-t后接采取的加密算法。执行后,会提示是否将生成的key存放在/home/you/.ssh/algorithm目录下,以及是否创建口令。一路默认即可生成

  2. 接下来,启动ssh-agent,添加刚刚生成的ssh key

    #run ssh-agent
    eval "$(ssh-agent -s)"
    #add key for management
    ssh-add ~/.ssh/id_ed25519
    
  3. 可以测试是否连接成功,正常情况下会收到github返回的成功提示:

    ssh -T git@github.com
    
  4. 接下来,将生成的ssh key提交到github的个人信息中:profile photo->Settings->SSH and GPG keys,然后按照提示,在本地查询并输入:

    $ cat ~/.ssh/id_ed25519.pub
    # Then select and copy the contents of the id_ed25519.pub file
    # displayed in the terminal to your clipboard
    

    如此,便完成了本地和github对于这一ssh key的配置,可以在以后通过SSH协议访问与操控github的资源了

  5. 在本地的仓库中添加remote时,可以直接在github上找到SSH协议访问仓库的URL,作为远程仓库地址进行配置,以后的git操作便不再需要用户认证了

参考教程

openVPN安装及使用

Generating a new SSH key and adding it to the ssh-agent

Adding a new SSH key to your GitHub account

git-ssh 配置和使用

Secure Shell