Network and Remote Interaction
netstat
:Network Statistics,查看本机网络信息
netstat
程序被用来检测各种各样的本机网络设置。通过选用不同的选项,我们可以查看有关本机的不同网络信息。
1 | netstat [OPTION] |
如,-ie
选项使得我们可以查看本系统的所有网络接口:
1 | [meme@localhost ~]$ netstat -ie |
上述两个网络接口中,第一个ens33
是因特网接口,主要信息有IPv4地址、掩码以及IPv6地址等;第二个接口lo
就是我们常说的内部回环网络接口,其IPv4地址以127
开头。
除
-ie
外还有许多选项,如-r
选项可以查看本机的路由表等。
wget
:World Wide Web Get,从网页中下载文件
wget
程序将互联网上的文件下载到当前目录,它的使用很简单,一般为wget
+目标文件的域名(URL)。
1 | wget [OPTION]... [URL]... |
ssh
:Secure Shell,安全的远程登陆
ssh
既是一个互联网协议,又是Linux命令行中的一个程序。在SSH之前,常用的远程登录协议有Rlogin和Telnet,这两个协议的重大缺陷是所有的通讯信息均以明文的方式传播,因而十分地不安全。SSH从两个方面解决了这个问题:
- SSH客户端所连接的远程主机必须为客户端所知,由此阻止了中间人攻击;
- SSH对本地客户端主机和远程主机之间的通信进行了加密。
SSH由两部分组成,运行在本地的SSH客户端和运行在远端主机的SSH服务器。一般来说,Linux发行版会自带一个提供SSH功能的软件包OpenSSH,它包括OpenSSH-client和OpenSSH-server两个分别提供客户端和服务器服务的程序,但是有些发行版(如Ubuntu)的OpenSSH只包含了OpenSSH-client。要想让系统能够接受远程客户端的连接,则必须手动安装OpenSSH-server。
SSH配置
无论是想让系统充当远程的服务器还是想让系统能够作为客户端连接远程主机,都必须要正确地配置相关的SSH文件。对于Linux系统,SSH服务器的配置文件通常是/etc/ssh/sshd_config
,SSH客户端的配置文件通常是~/.ssh/config
,以上两个文件若没有则需要自己创建。
SSH客户端配置与连接
对于一般用户来说,SSH客户端是更常用的一方,因此只介绍SSH客户端的配置。通常,有4个主要配置项:
1 | Host [HOST NAME] |
其中,Host
是用户为该远程主机指定的标识符,可任意;HostName
是该远程主机的公网IP地址;User
则是用户登录远程主机时的默认身份,该身份必须是远程主机上有且允许远程登录的用户;Port
是要连接的SSH服务器监听的端口,要与远程主机SSH服务器配置文件中的端口匹配。配置完成后,我们便可用命令:
1 | ssh [HOST NAME] 或 |
连接远程主机。当然,我们也可以以远程主机允许的其他用户身份登录:
1 | ssh [OTHER USER NAME]@[HOST NAME] |
一般来说,我们登录远程主机的验证方式默认为输入登录用户的密码,当然也可以在配置文件中增加IdentityFile
选项使得我们能以私钥文件的形式实现免密登录。
1 | [meme@localhost ~]$ ssh remote-sys |
第一次登录未曾登录过的远程主机时,客户端会启动保护机制,如上面的
Are you sure...
。成功输入密码后,我们便进入了远端的shell会话,直到我们输入exit
,该会话都会一直存在。需要注意的是,有时远程登录会报错
Bad owner or permissions on ~/.ssh/config
,这是因为有其他的用户拥有了对~/.ssh/config
的使用权限,我们只要用chmod 600 ~/.ssh/config
使得该文件只能由文件拥有者操作即可。
若没有可用的远程主机,则可以用localhost
作为远端主机名,此时计算机会和自己建立“远程连接”且无需输入密码。
1 | [meme@localhost ~]$ ssh localhost |
有时,我们只想用远程主机执行个位数的命令,那么我们就没有必要登录又退出远程主机,而是可以直接在连接过程中就发送我们想要执行的命令:
1 | [meme@localhost ~]$ ssh remote-sys 'ls ..' |
上面的ls ..
让远程主机执行ls
命令列出默认登录目录的父目录的内容,然后就退出登录。特别需要注意的是,引号表示该命令由远程主机执行,因此下面两个命令得到的是完全不同的结果:
1 | [meme@localhost ~]$ ssh remote-sys 'ls ..' > dirlist.txt |
其中,第一个命令是让远程主机列出父目录的内容并将结果重定向至本地的dirlist.txt
文件;而第二个命令则是让远程主机列出父目录的内容并将结果重定向至远程主机的dirlist.txt
文件。
scp
:Secure Copy,安全的远程复制
scp
是OpenSSH的内置程序,它基于SSH实现安全的远程复制:
1 | scp [[USER@]HOST:]FILE |
它的用法很简单,scp
+SSH远程服务器+目标文件。程序运行的结果是远程的目标文件被复制到本地目录。
1 | [meme@localhost ~]$ scp remote-sys:document.txt |
sftp
:Secure FTP,安全的FTP
sftp
是用SSH强化了安全性的FTP协议,它也是OpenSSH的内置程序,同样也是基于SSH实现的。其用法与常规的ftp
命令完全一样,只不过远程的SSH服务器充当了FTP服务器:
1 | [meme@localhost ~]$ sftp remote-sys |
输入密码后,我们将登录远程的shell。lcd
指令即“Local Change Directory”,是指切换本地主机,即客户端主机的目录,而cd
才是切换远程服务器的目录。get
使得远程的文件被传输到本地主机的Desktop
目录下。输入bye
或exit
或quit
我们将退出远程服务器。