• SSH 教程2 密钥登录 证书登录 端口转发 [MD]


    博文地址

    我的GitHub 我的博客 我的微信 我的邮箱
    baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

    目录

    SSH 教程 -2

    本文改编自 网道的 SSH 教程,主要为了精简大量本人不感兴趣的内容。

    本教程约定,大写的 SSH 表示协议,小写的 ssh 表示客户端软件。

    SSH 密钥登录

    SSH 默认采用密码登录,密钥登录是比密码登录更好的方案。

    密钥(key)是一个非常大的数字,通过加密算法得到。对称加密只需要一个密钥,非对称加密需要两个密钥成对使用,分为公钥(public key)和私钥(private key)。

    SSH 密钥登录采用的是非对称加密,每个用户通过自己的密钥登录。其中,私钥必须私密保存,不能泄漏;公钥则是公开的,可以对外发送。公钥和私钥是一一对应的,每一个私钥都有且仅有一个对应的公钥,反之亦然。

    如果数据使用公钥加密,那么只有使用对应的私钥才能解密;同样,如果使用私钥加密(这个过程一般称为签名),也只有使用对应的公钥才能解密。

    密钥登录的过程

    SSH 密钥登录分为以下的步骤。

    • 第一步,手动将客户端的公钥放入远程服务器的指定位置
    • 第二步,客户端向服务器发起 SSH 登录的请求
    • 第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份
    • 第四步,客户端收到服务器发来的数据,使用客户端的私钥对随机数据进行加密 -- 即签名,然后再发给服务器
    • 第五步,服务器收到客户端发来的加密签名后,使用客户端的公钥解密,然后跟原始数据比较,如果一致,就允许用户登录

    使用 ssh-keygen 生成密钥

    OpenSSH 提供的ssh-keygen命令,可以用来生成密钥。

    cd ~/.ssh            # 定位到 C:\Users\白乾涛\.ssh 目录,没有时可以手动创建
    ssh-keygen           # 生成密钥,不指定加密算法时默认使用 RSA 算法
    ssh-keygen -t dsa    # 指定密钥的加密算法,一般选择 DSA 算法或 RSA 算法
    ssh-keygen -C xx@yy  # 指定注释,不指定时默认使用当前的用户名和主机名作为注释
    

    使用案例

    ssh-keygen -t rsa -C baiqiantao@sina.com
    
    # 会让你确认文件名和密码(passphrase),一般不需要输入,连输三个回车就行
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/白乾涛/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    
    # 提示生成的密钥保存的位置
    Your identification has been saved in /c/Users/白乾涛/.ssh/id_rsa
    Your public key has been saved in /c/Users/白乾涛/.ssh/id_rsa.pub
    
    # 打印公钥的指纹、注释等信息
    The key fingerprint is:
    SHA256:0OhBsziHgIT6kY8gZzleNJ4gZc1C8IjCTOjs+ajDE7k baiqiantao@sina.com
    

    公钥文件的内容类似下面这样。

    ssh-rsa AAAAB3NzaC1yc......Bw49gnT80U= baiqiantao@sina.com
    # 注意,公钥只有一行。末尾的 baiqiantao@sina.com 是公钥的注释,不是必需项。
    

    命令的配置项

    • -b:bits,指定密钥的二进制位数
    • -C:comment,为密钥文件指定新的注释,格式为username@host
    • -f:file,指定生成的私钥文件
    • -t:指定生成密钥的加密算法,dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
    • -N:new,在创建时指定私钥的密码
    • -p:passphrase,在创建后重新指定私钥的密码
    • -F:find,检查某个主机名是否在known_hosts文件里面
    • -R:remove,将指定的主机公钥指纹移出known_hosts文件
    ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile] [-m format] [-N new_passphrase] [-O option] [-t rsa] [-w provider]
    ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase] [-P old_passphrase]
    ssh-keygen -i [-f input_keyfile] [-m key_format]
    ssh-keygen -e [-f input_keyfile] [-m key_format]
    ssh-keygen -y [-f input_keyfile]
    ssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]
    ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
    ssh-keygen -B [-f input_keyfile]
    ssh-keygen -D pkcs11
    ssh-keygen -F hostname [-lv] [-f known_hosts_file]
    ssh-keygen -H [-f known_hosts_file]
    ssh-keygen -K [-a rounds] [-w provider]
    ssh-keygen -R hostname [-f known_hosts_file]
    ssh-keygen -r hostname [-g] [-f input_keyfile]
    ssh-keygen -M generate [-O option] output_file
    ssh-keygen -M screen [-f input_file] [-O option] output_file
    ssh-keygen -I certificate_identity -s ca_key [-hU] [-D pkcs11_provider][-n principals] [-O option] [-V validity_interval] [-z serial_number] file ...
    ssh-keygen -L [-f input_keyfile]
    ssh-keygen -A [-a rounds] [-f prefix_path]
    ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ...
    ssh-keygen -Q [-l] -f krl_file [file ...]
    ssh-keygen -Y find-principals -s signature_file -f allowed_signers_file
    ssh-keygen -Y check-novalidate -n namespace -s signature_file
    ssh-keygen -Y sign -f key_file -n namespace file ...
    ssh-keygen -Y verify -f allowed_signers_file -I signer_identity -n namespace -s signature_file [-r revocation_file]
    

    上传公钥

    生成密钥以后,公钥必须上传到服务器,才能使用公钥登录。

    手动上传公钥到服务器

    OpenSSH 规定,用户的公钥需要添加到服务器上该用户主目录的~/.ssh/authorized_keys文件中,每个公钥占一行。用户可以手动创建、编辑该文件。

    cat  ~/.ssh/authorized_keys    # 查看
    touch ~/.ssh/authorized_keys   # 创建
    vim ~/.ssh/authorized_keys     # 编辑
    

    公钥上传到服务器后,下次登录时,OpenSSH 就会自动采用密钥登录,不再提示输入密码。

    使用 ssh-copy-id 上传公钥

    通过 OpenSSH 提供的ssh-copy-id命令,可以自动将公钥拷贝到远程服务器的~/.ssh/authorized_keys文件。如果文件不存在,会自动创建该文件。

    用户在本地计算机执行下面的命令,就可以把本地的公钥拷贝到服务器

    ssh-copy-id -i xx user@host
    # 把公钥 xx 拷贝到服务器 host 下 user 用户的 ~/.ssh/authorized_keys 中
    # 参数 -i 用来指定公钥文件,公钥文件可以不指定路径和后缀名,会自动在 ~/.ssh 目录里面寻找
    # user 是所要登录的账户名,省略时默认使用当前的本机用户名;host 是服务器地址
    

    执行 ssh-copy-id 命令时,会采用密码登录,系统会提示输入远程服务器的密码

    注意,ssh-copy-id命令是直接将公钥添加到authorized_keys文件的末尾,所以请务必保证authorized_keys文件的末尾是一个换行符,否则会导致两个公钥连在一起,使得它们都无法生效。

    手动配置公钥到 GitHub

    • 复制文件id_rsa.pub里面的内容
    • 依次进入Github -> Settings -> SSH and GPG keys -> New SSH key
    • Title处填入任意的标识,在Key部分里面添加刚才复制的id_rsa.pub文件里的内容,点击添加即可
    ssh -T git@github.com   # 验证是否添加成功
    Hi baiqiantao! You've successfully authenticated, but GitHub does not provide shell access.
    

    实战:通过 SSH 登录 WSL

    我的 wsl 登录密码为:123

    环境准备

    wsl       # 启动后显示的 bqt@BQT-X 代表 user@host,$ 代表普通用户,# 代表 root 用户
    uname -a  # 显示电脑以及操作系统的相关信息【Linux BQT-X 4.19.128... GNU/Linux】
    cd ~      # 进入用户主目录【/home/bqt】,其他命令【echo ~】【whoami】【pwd】【ll】
    ifconfig  # 查看服务端的 ip,此 ip 即服务器的 host,例如【inet 172.26.238.88】
    ssh -V    # 显示 ssh 版本【OpenSSH_8.2p1...】,没安装时会提示你安装
    
    sudo apt install openssh-client      # 在 Ubuntu 和 Debian 上安装 ssh 客户端
    sudo apt install openssh-server      # 在 Ubuntu 和 Debian 上安装 ssh 服务端
    sudo service ssh restart/start/stop  # 重启/启动/停止 sshd 服务
    ps -e |grep ssh                      # 服务启动的话会看到 sshd
    

    服务端配置

    # 启动服务时如果提示 sshd: no hostkeys available,说明还没为服务器 host 生成密钥
    sudo chmod 777 /etc/ssh/                        # 修改权限,否则生成的密钥无法保存
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  # 生成服务器的 rsa 密钥,注意存放位置
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  # 生成服务器的 dsa 密钥,注意存放位置
    
    # 即使将客户端的公钥上传到了服务器,服务端 sshd 配置文件中的一些配置项,也可能会导致密钥登录失败
    cat /etc/ssh/sshd_config             # 查看服务端 sshd 的配置,可使用【|grep】过滤
    sudo chmod 777 /etc/ssh/sshd_config  # 修改权限
    vim /etc/ssh/sshd_config             # 修改配置
    
    cat /etc/ssh/sshd_config |grep PasswordAuthentication  # 修改为 no,启用密码登录
    cat /etc/ssh/sshd_config |grep StrictModes             # 修改为 no,禁用严格模式
    sudo service ssh restart                               # 必须重启 sshd 才能生效
    

    上传公钥

    ssh bqt@172.26.238.88                    # 未上传公钥前会要求输入密码
    ssh-copy-id -i id_rsa bqt@172.26.238.88  # 上传公钥,上传后不需要密码就可以直接登录
    
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    bqt@172.26.238.88 ’s password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh bqt@172.26.238.88"
    and check to make sure that only the key(s) you wanted were added.
    

    注意,有些版本的 ssh-copy-id 命令会导致上传失败,详见 ssh-copy-id fails due to shell incompatibility

    SSH 证书登录

    SSH 是服务器登录工具,一般情况下都采用密码登录密钥登录,这两种方式都有各自的缺点。

    • 密码登录需要输入服务器密码,这非常麻烦,也不安全,存在被暴力破解的风险。
    • 密钥登录需要服务器保存用户的公钥,也需要用户保存服务器公钥的指纹。这对于多用户、多服务器的大型机构很不方便,例如如果有员工离职,需要将他的公钥从每台服务器删除。

    什么是证书登录

    证书登录就是为了解决上面的缺点而设计的。它引入了一个证书颁发机构(Certificate Authority,简称 CA),对信任的服务器颁发服务器证书,对信任的用户颁发用户证书

    登录时,用户和服务器不需要提前知道彼此的公钥,只需要交换各自的证书,验证是否可信即可。

    证书登录的主要优点有两个:

    • 用户和服务器不用交换公钥,这更容易管理,也具有更好的可扩展性
    • 证书可以设置到期时间,而公钥没有到期时间,可以进一步提高安全性

    证书登录的流程

    SSH 证书登录之前,如果还没有证书,需要生成证书。具体方法是:

    • 用户将自己的公钥发给 CA,CA 使用用户的公钥,生成用户证书,发给用户
    • 服务器将自己的公钥发给 CA,CA 使用服务器公钥,生成服务器证书,发给服务器

    有了证书以后,用户就可以登录服务器了。整个过程都是 SSH 自动处理,用户无感知。

    • 第一步,用户登录服务器时,SSH 自动将用户证书发给服务器
    • 第二步,服务器检查用户证书是否有效,以及是否由可信的 CA 颁发。证实以后,服务器就可以信任用户
    • 第三步,SSH 自动将服务器证书发给用户
    • 第四步,用户检查服务器证书是否有效,以及是否由信任的 CA 颁发。证实以后,用户就可以信任服务器
    • 第五步,双方建立连接,用户成功登录服务器

    使用 CA 签发证书

    生成 CA 密钥

    证书登录的前提是,必须有一个 CA,而 CA 本质上就是一对密钥,跟其他密钥没有不同,CA 就用这对密钥去签发证书。

    虽然 CA 可以用同一对密钥签发用户证书和服务器证书,但是出于安全性和灵活性,CA 一般需要两对密钥,一对用来签发用户证书,另一对用来签发服务器证书。

    ssh-keygen -t rsa -f ~/.ssh/user_ca -C user_ca  # 生成 CA 签发用户证书的密钥
    ssh-keygen -t rsa -f ~/.ssh/host_ca -C host_ca  # 生成 CA 签发服务器证书的密钥
    

    签发服务器证书

    CA 签发服务器证书时,需要 CA 的密钥以及服务器的公钥

    一般来说,SSH 服务器安装时,已经生成密钥/etc/ssh/ssh_host_rsa_key了,如果没有的话,可用下面的命令生成。

    sudo chmod 777 /etc/ssh/                        # 可能需要修改权限,否则生成的密钥无法保存
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  # 生成服务器的 rsa 密钥,注意存放位置
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  # 生成服务器的 dsa 密钥,注意存放位置
    

    将服务器公钥ssh_host_rsa_key.pub上传到 CA 服务器后,就可以使用 CA 的密钥host_ca为服务器的公钥ssh_host_rsa_key.pub签发服务器证书。

    ssh-keygen -s host_ca -I xxx -h -n yyy -V +52w ssh_host_rsa_key.pub  # 生成服务器证书
    ssh-keygen -L -f ssh_host_rsa_key-cert.pub                           # 查看证书信息
    
    • -s:signature,指定 CA 签发服务器证书的密钥
    • -I:identity,身份字符串,可以随便设置,用于方便区分证书,将来可以使用这个字符串撤销证书
    • -h:host,指定该证书是服务器证书,而不是用户证书
    • -n:name,指定服务器的域名,表示证书仅对该域名有效
      • 如果有多个域名,则使用逗号分隔
      • 用户登录该域名服务器时,SSH 通过这个值,分辨应该使用哪张证书发给用户,用来证明服务器的可信性
    • -V:validity,指定证书的有效期,+52w表示为52周(即一年),+1d表示为1天。证书默认永远有效
    • ssh_host_rsa_key.pub:服务器的公钥
    ssh-keygen -s host_ca -I host_ca_bqt -h -n 172.26.238.88 -V +52w ssh_host_rsa_key.pub
    
    Signed host key ssh_host_rsa_key-cert.pub: id "host_ca_bqt" serial 0 for 172.26.238.88
    valid from 2021-12-12T00:38:00 to 2022-12-11T00:39:18
    

    签发用户证书

    和签发服务器证书类似,将用户公钥user_key.pub上传到 CA 服务器后,就可以使用 CA 的密钥user_ca为用户的公钥user_key.pub签发用户证书。

    ssh-keygen -s user_ca -I user_ca_bqt -n bqt -V +52w user_key.pub # 和签发服务器证书相比,少了一个【-h】
    
    Signed user key user_key-cert.pub: id "user_ca_bqt" serial 0 for bqt
    valid from 2021-12-12T00:45:00 to 2022-12-11T00:46:01
    
    • -n:name,指定用户名,表示证书仅对该用户名有效
      • 如果有多个用户名,使用逗号分隔
      • 用户以该用户名登录服务器时,SSH 通过这个值,分辨应该使用哪张证书,证明自己的身份,发给服务器
    • user_key.pub:用户的公钥

    安装证书

    服务器安装证书

    scp ssh_host_rsa_key-cert.pub bqt@172.26.238.88:/etc/ssh/  # 将生成的服务器证书,拷贝到服务器
    

    然后,修改服务器配置文件/etc/ssh/sshd_config,设置服务器使用的证书为ssh_host_rsa_key-cert.pub

    cat /etc/ssh/sshd_config |grep HostCertificate       # 查看服务器当前使用的证书
    HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub   # 修改服务器使用的证书
    sudo service ssh restart                             # 必须重启 sshd 才能生效
    

    服务器安装 CA 公钥

    为了让服务器信任用户证书,必须将 CA 签发用户证书的公钥 拷贝到服务器的/etc/ssh目录。

    scp user_ca.pub bqt@172.26.238.88:/etc/ssh/  # 将签发用户证书的公钥,拷贝到服务器
    

    然后,修改服务器配置文件/etc/ssh/sshd_config,设置服务器信任此签发用户证书的公钥user_ca.pub。设置后,所有登录服务器的账户,都会信任user_ca.pub签发的用户证书。

    cat /etc/ssh/sshd_config |grep TrustedUserCAKeys  # 查看服务器当前信任的,签发用户证书的公钥
    TrustedUserCAKeys /etc/ssh/user_ca.pub            # 设置服务器信任 user_ca 签发的用户证书
    sudo service ssh restart                          # 必须重启 sshd 才能生效
    

    另一种做法

    另一种做法是将user_ca.pub加到服务器某个账户~/.ssh/authorized_keys文件,只让该账户信任user_ca签发的用户证书。具体方法是打开~/.ssh/authorized_keys,追加一行,开头是@cert-authority principals="...",然后后面加上user_ca.pub的内容,大概是下面这个样子。

    @cert-authority principals="user" ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
    # 代码中 "user" 指的是用户登录的服务器账户名,一般就是 authorized_keys 文件所在的账户
    

    客户端安装证书

    客户端安装用户证书很简单,就是将 CA 生成的用户证书user_key-cert.pub复制到客户端,与用户的密钥user_key保存在同一个目录即可。

    客户端安装 CA 公钥

    为了让客户端信任服务器证书,必须将 CA 签发服务器证书的公钥 拷贝到客户端。

    • 用户级别配置文件:~/.ssh/known_hosts
    • 全局级别配置文件:/etc/ssh/ssh_known_hosts

    具体做法是,打开配置文件,追加一行,开头为@cert-authority *.example.com,然后将签发服务器证书的公钥host_ca.pub的内容粘贴在后面。

    @cert-authority 172.26.238.88 ssh-rsa AAAAB3NzaC1yc......DCKhor3AOb0= host_ca
    

    上面的*.example.com是域名的模式匹配,表示只要服务器符合该模式的域名,且签发服务器证书的 CA 匹配后面给出的公钥,就都可以信任

    • 如果没有域名限制,这里可以写成*
    • 如果有多个域名模式,可以使用逗号分隔
    • 如果服务器没有域名,可以用主机名或者 IP 地址

    使用证书登录远程服务器

    ssh bqt@172.26.238.88             # 使用默认的密钥 id_rsa 与证书 id_rsa-cert.pub 登录服务器
    ssh -i user_key bqt@172.26.238.88 # 使用指定的密钥 user_key 与证书 user_key-cert.pub 登录服务器
    

    废除证书

    废除证书的操作,分成用户证书的废除和服务器证书的废除两种。

    服务器证书的废除,只需用户在客户端known_hosts文件里面,删除对应的@cert-authority命令的那一行即可。

    用户证书的废除,需要

    • 在服务器通过命令新建一个/etc/ssh/revoked_keys文件,文件中保存的是不再信任的用户公钥
    • 在服务器配置文件sshd_config中,将配置项RevokedKeys的值设置为此文件
    ssh-keygen -k -f /etc/ssh/revoked_keys -z 1 ~/.ssh/user1_key.pub    # 将不再信任的用户公钥保存在第1行
    ssh-keygen -k -f -u /etc/ssh/revoked_keys -z 2 ~/.ssh/user2_key.pub # 将不再信任的用户公钥保存在第2行
    RevokedKeys /etc/ssh/revoked_keys                                   # 让服务器知晓不再信任的用户公钥
    

    SSH 端口转发

    SSH 除了登录服务器,还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板,使得原本不加密的通信变成加密通信。这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)。

    端口转发有两个主要作用:

    • 将不加密的数据放在 SSH 安全连接里面传输,使得原本不安全的网络服务增加了安全性,比如通过端口转发访问 Telnet、FTP 等明文服务,数据传输就都会加密
    • 作为数据通信的加密跳板,绕过网络防火墙

    端口转发有三种使用方法:动态转发本地转发远程转发

    这一块的内容非常重要,这里就先不写了,后面会专门学习总结。

    其他相关命令

    安全拷贝命令:scp

    scp是 SSH 提供的一个客户端程序,用来在两台主机之间加密传送文件。使用scp传输数据时,文件和密码都是加密的,不会泄漏敏感信息。

    scp是 secure copy 的缩写,它的底层是 SSH 协议,默认端口是22,相当于先使用ssh命令登录远程主机,然后在加密连接之中复制文件。客户端发起连接后,会提示用户输入密码。如果是在两个远程系统之间复制,系统将提示你输入两个远程帐户的密码。

    使用案例

    scp fromFile user@host:toFile    # 将本机当前目录的 fromFile 复制到远程主机用户主目录下的 toFile
    scp user@host:fromFile toFile    # 如果目标位置已存在同名文件,则会在不提示的情况下直接覆盖
    scp from1 from2 user@host:toDir  # 支持一次复制多个文件
    scp user_ca.pub bqt@172.26.238.88:/etc/ssh/  # 将签发用户证书的公钥,拷贝到服务器
    
    # 用户名的默认值是本机的当前用户名,主机名默认为当前主机,也可以使用配置文件中定义的主机别名
    scp sourceFile remote_username@server_ip:/remoteTargetFile   # 复制本地文件到远程主机
    scp -r sourceDir remote_username@server_ip:/remoteTargetDir  # 复制本地整个目录到远程主机
    scp remote_username@server_ip:/remoteSourceFile targetFile   # 复制远程主机文件到本地
    scp -r remote_username@server_ip:/remoteSourceDir targetDir  # 复制远程主机整个目录到本地
    scp userA@hostA:dir/SourceFile userB@hostB:dire/SourceFile   # 从远程主机 A 拷贝到远程主机 B
    

    配置项

    • -c:使用指定的加密算法
    • -F:使用指定的配置文件,默认为.ssh/config,连接时可以使用配置文件中定义的主机别名等配置
    • -i:使用指定的密钥
    • -P:指定远程主机的 SSH 端口,默认端口为 22
    • -l:限制传输数据的带宽速率,单位是 Kbit/sec
    • -C:无参数,在传输时压缩文件
    • -p:无参数,保留 modification time、access time、mode 等原始文件的信息
    • -q:无参数,关闭显示拷贝的进度条
    • -r:无参数,以递归方式复制目录
    • -v:无参数,显示详细的输出

    文件同步命令:rsync

    rsync 是 Linux 中用于文件同步的应用程序,它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件。它也可以当作文件复制工具,替代cpmv命令。

    名称里面的r指的是 remote,rsync 其实就是 remote sync 的意思。与文件传输工具 FTP 或 scp 相比,rsync 最大的特点是,会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

    rsync 并不是 SSH 工具集的一部分。

    sudo apt-get install rsync   # 传输的双方都必须安装 rsync
    rsync -r source destination  # 将源目录拷贝到目标目录,参数 -r 表示递归,即包含子目录
    rsync -r s1 s2 destination   # 可以同时拷贝多个文件或目录。目标目录如果不存在,会自动创建
    rsync -a source destination  # 参数 -a 表示除了递归同步以外,还同步元信息,比如修改时间、权限等
    rsync -a source/ destination # 以斜杠结尾表示只同步内容,而不会在 destination 下面创建 source 子目录
    rsync -anv source/ dest      # -n 表示是模拟命令执行的结果,而并不真的执行命令;-v 是将结果输出到终端
    rsync -av --delete sou/ dest # --delete 表示将目标目录成为源目录的一个镜像,会删除源目录中不存在的文件
    

    安全文件传输命令: sftp

    sftp是 SSH 提供的一个客户端应用程序,主要用来安全地访问 FTP。sftp就相当于将 FTP(File Transfer Protocol) 放入了 SSH。

    sftp username@hostname     # 连接 FTP 主机,连接时会要求输入 FTP 的密码
    # 密码验证成功以后,就会出现 FTP 的提示符【sftp>】,下面就可以输入各种 FTP 命令了
    
    • ls [directory]:列出远程目录的内容
    • cd directory:改到指定的远程目录
    • mkdir directory:创建一个远程目录
    • rmdir path:删除一个远程目录
    • put localfile [remotefile]:将本地文件推送(put)到远程主机
    • get remotefile [localfile]:将远程主机文件拉取(get)到本地
    • help:显示帮助信息
    • byequitexit:退出 sftp

    2021-12-12

    本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/15680426.html

  • 相关阅读:
    把ssl模块加入到已经编译好的apache中实现HTTPS
    六,集合
    一. 计算机语言基础知识:
    三, 字符串
    四,列表的使用方法
    hash()函数的用法
    五,字典用法总结
    十,编码
    七八九,条件和循环语句
    二.Python的基础语法知识
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/15680426.html
Copyright © 2020-2023  润新知