连接远程linux服务器,并使用vim编辑器编程

连接远程服务器

连接服务器

腾讯云官方教程

SSH简介

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持,Windows 10 1803版本已提供OpenSSH工具。

在设计上,SSH是Telnet和非安全shell的替代品。Telnet和Berkeley rlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。SSH旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。

不过,SSH也被指出有被嗅探甚至解密的漏洞。早在2011年,中国的互联网审查机构已经有能力针对SSH连线的刺探及干扰。而后爱德华·斯诺登泄露的文件也指出,美国国家安全局有时能够把SSH协议传输的信息解密出来,从而读出SSH会话的传输内容。2017年7月6日,非营利组织维基解密确认美国中央情报局已经开发出能够在Windows或Linux操作系统中窃取SSH会话的工具。

使用ssh密钥文件登陆服务器

1.执行以下命令,赋予私钥文件仅本人可读权限。

  • 如果您的本地电脑为 Mac OS 系统,需先打开系统自带的终端(Terminal),再执行以下命令。
    chmod 400 <下载的与云服务器关联的私钥的绝对路径>

  • 如果您的本地电脑为 Linux 系统,可直接执行以下命令。
    chmod 400 <下载的与云服务器关联的私钥的绝对路径>

  • 如果您的本地电脑为 Windows 10 系统,需先打开命令提示符(CMD),再依次执行以下命令。
    icacls <下载的与云服务器关联的私钥的绝对路径> /grant <Windows 系统用户帐户>:F
    icacls <下载的与云服务器关联的私钥的绝对路径> /inheritancelevel:r

2.执行以下命令,进行远程登录。

sudo apt-get install ssh //安装 SSH(Secure Shell) 服务以提供远程管理服务
ssh -i <下载的与云服务器关联的私钥的绝对路径> <username>@<hostname or IP address>//SSH 远程登入 Ubuntu 机

username 即为前提条件中获得的默认帐号。
hostname or IP address 为您的 Linux 实例公网 IP 或自定义域名。
例如,执行ssh -i "Mac/Downloads/shawn_qcloud_stable.pem" ubuntu@192.168.11.123 命令,远程登录 Linux 云服务器。

文件上传与下载

FTP/FTPS/SFTP区别

一、FTP(文件传输协议)

FTP全称是File Transfer Protocol。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20,FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。

FTP的传输有两种方式:ASCII、二进制。
1.ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。
2.二进制传输模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
3.小结
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)

FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。
1.Port模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
2.Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
3.小结
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

二、FTPS (一种多传输协议)
一种多传输协议,相当于加密版的FTP。默认端口号是21。当你在FTP服务器上收发文件的时候,你面临两个风险。第一个风险是在上载文件的时候为文件加密。第二个风险是,这些文件在你等待接收方下载的时候将停留在FTP服务器上,这时你如何保证这些文件的安全。你的第二个选择(创建一个支持SSL的FTP服务器)能够让你的主机使用一个FTPS连接上载这些文件。这包括使用一个在FTP协议下面的SSL层加密控制和数据通道。SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布TLS 1.0标准文件(RFC 2246)。随后又公布TLS 1.1(RFC 4346,2006年)、TLS 1.2(RFC 5246,2008年)和TLS 1.3(RFC 8446,2018年)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛使用这个协议。许多网站,如Google、Facebook、Wikipedia等也以这个协议来创建安全连线,发送资料。目前已成为互联网上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

FTPS是在 安全套接层(?)使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。
和sftp连接方法类似,在windows中可以使用FileZilla等传输软件来连接FTPS进行上传,下载文件,建立,删除目录等操作,在FileZilla连接时,有显式和隐式TLS/SSL连接之分,连接时也有指纹提示。

SSL/TLS协议在传输层(TCP/IP)之上、但是在应用层之下工作的。因此,它可以很容易在诸如HTTP,Telnet,POP3,IMAP4,SMTP和FTP等应用层协议上实现。SSL安全扩展至少有两种不同的初始化方法:显式安全和隐式安全。
显示安全:为了建立SSL连接,显式安全要求FTP客户端在和FTP服务器建立连接后发送一个特定的命令给FTP服务器。客户端使用服务器的缺省端口。
隐式安全: 当FTP客户端连接到FTP服务器时,隐式安全将会自动和SSL连接一起开始运行。在隐式安全中服务器定义了一个特定的端口(TCP端口990)让客户端来和其建立安全连接。

三、SFTP(安全文件传送协议)
一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至服务器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
————————————————
版权声明:本文为CSDN博主「shmilychan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shmilychan/article/details/51848850

四 、小结
SFTP 和FTPS都是为ftp连接加密,协议非常相似。
一个是借助ssl协议加密,一个是借助ssh加密。
ssl是为http/smtp等加密设计的,ssh是为telnet/ftp等加密、建立传输通道而设计的。

其实ssh建立传输通道就是为了加密和传输,而且这个通道是可以用来远程登录。如果只说它们的功能,通俗的讲,ssh就像铺管子,ssl就像打包裹,铺管子和打包裹都会使数据安全,都是一个制作密钥的过程,而因为ssh是一个管子所以它很适合ftp的安全传输。

SSH传文件使用

  • 当你的.ssh文件里只有一个密钥时
    将 文件/文件夹 从远程 Ubuntu 机下载至本地
    scp <用户名>@<ssh服务器地址>:<文件路径> <本地文件名> 
    scp -r username@192.168.0.1:/home/username/remotefile.txt //参数-r表示文件夹

    将 文件/文件夹 从本地上传至远程 Ubuntu 机
    scp <本地文件名> <用户名>@<ssh服务器地址>:<上传保存路径即文件名> 
    scp -r localfile.txt username@192.168.0.1:/home/username/ //参数-r表示文件夹
这里需要注意的一点是,只能将文件上传至用户目录下。如需上传至其它目录,可先上传至用户目录,然后移动文件至指定位置。
    scp -P 8000 -r test root@192.168.0.101:/var/www/ //-P参数指定端口
    将 文件/文件夹 从远程 Ubuntu 机拷至本地(rsync)
rsync -v -u -a --delete --rsh=ssh --stats username@192.168.0.1:/home/username/remotefile.txt .
    将 文件/文件夹 从本地拷至远程 Ubuntu 机(rsync)
rsync -v -u -a --delete --rsh=ssh --stats localfile.txt username@192.168.0.1:
https://www.ruanyifeng.com/blog/2020/08/rsync.html
  • 当.ssh中有多个密钥时
    需要先配置。
    在.ssh目录下新建一个叫config的文件,内容如下
# first account,用来登录远程服务器
Host company
HostName ip地址/域名
PreferredAuthentications publickey
IdentityFile ~/.ssh/mainserver.pem
User ubuntu
# second account,用来克隆github
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
字段 含义
Host 自己起的别名(以后登录时用)
HostNmae 主机名(ip地址/域名)
IdentityFile 密钥文件
User 远程主机用户名

以后登录主机命令可简化为
ssh Host
克隆指令
从git clone git@github.com:vim/vim.git
变为git clone git@Host:vim/vim.git
scp命令
命令格式:scp 源路径 目标路径
上传scp <本地文件路径> <别名>:<远程主机路径>
下载scp <别名>:<远程主机路径> <本地文件路径>

例:scp temp company:~/
company:后面的~被解析成company主机的用户路径,如home/ubuntu
如果要传文件夹,则需加上-r参数
scp -r tempdir company:~/

可能遇到的问题
Q1.Permission denied
A1:可能时要上传的路径权限问题sudo chmod 754 folderName
Q2:如何生成多个密钥
A2:生成ssh密钥:
$ ssh-keygen -t rsa -C
生成another SSH key:
$ ssh-keygen -t rsa -f ~/.ssh/accountB -C
unix和linux快捷键
解决SSH长时间无操作断线

vim配置与使用

~目录下面没有.vimrc和.vim目录是为什么?

根用户和普通用户的目录里面~/ 都没有.vimrc和 .vim目录,我可以在/etc/vim/里面找到vimrc等东西,也可以在/usr/share/vim/里面找到vimrc

把/etc/vim/vimrc复制为~/.vimrc,然后修改修改就可以了
也可以不复制。因为/etc/vimrc和~/.vimrc都要被读取,只是~/.vimrc的优先级高。

基本技巧

https://zhuanlan.zhihu.com/p/68111471

配置参考的文章

https://github.com/yangyangwithgnu/use_vim_as_ide#6.1
https://vimjc.com/vimrc-config.html

vundle管理插件

安装与基本配置

2.1 安装Vundle
Vundle插件也是提供一个Vundle.vim文件,其下载地址为:https://github.com/VundleVim/Vundle.vim.git
将下载的Vundle.vim文件保存到 ~/.vim/bundle 即可完成Vundle的安装。

也可以使用以下的命令直接从 GitHub 拉取 Vundle.vim 文件到 ~/.vim/bundle 文件夹下。
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
2.2 配置Vundle
修改Vim配置文件vimrc,增加必要的配置,以下是 .vimrc 配置模板。

set nocompatible               "去除VIM一致性,必须"
filetype off                   "必须"

"设置包括vundle和初始化相关的运行时路径"
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

"启用vundle管理插件,必须"
Plugin 'VundleVim/Vundle.vim'

"在此增加其他插件,安装的插件需要放在vundle#begin和vundle#end之间"
"安装github上的插件格式为 Plugin '用户名/插件仓库名'"

call vundle#end()              
filetype plugin indent on      "加载vim自带和插件相应的语法和文件类型相关脚本,必须"

更多Vundle有关配置可以参考github上的Quick Start
2.3 使用Vundle安装插件
首先需要将要安装的插件,按照上述配置格式将插件地址填写在vundle#begin和vundle#end之间并保存。
设置好配置文件后,可通过下述两种方法安装插件:
(1) 在Vim命令行模式下运行命令:PluginInstall
(2) 在终端命令行下通过命令vim +PluginInstall +qall直接安装
至此,需要安装的插件已经安装完毕,可以正常使用了。
2.4 使用Vundle删除插件
(1) 需要删除Vim插件时,只需编辑Vim配置文件.vimrc文件,删除要移除插件所对应的 Plugin 一行
(2) 打开Vim,在Vim命令行模式执行命令:BundleClean即可删除对应Vim插件
如果你安装的vim插件非常多,又对vim启动速度等非常苛刻,建议你使用另外一款轻量高效的Vim插件管理神器vim-plug。

更多信息

包括离线下载
https://www.cnblogs.com/xcw0754/p/8391711.html

问题合集

Not an editor command
就是没安装好插件

选中文本并处理

选中文本

v
从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。
V
从光标当前行开始,光标经过的行都会被选中,再按一下V结束。
Ctrl + v

从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束。

选中全部的文本:
ggVG

其中gg为跳到首行的行首
V进入行可视模式 (如果是小字的v,那么就是字可视模式,这样如果行尾不止一个字,那么就不能完全全选)
G跳到行尾

处理

选中后就可以用编辑命令对其进行编辑,如
删除
d
复制 (默认是复制到”寄存器)
y
复制到系统剪贴板(也就是vim的+寄存器)
"+y
从系统剪贴板粘贴
"+p