zoukankan      html  css  js  c++  java
  • SSH、SCP命令及使用说明

    SSH篇

    1、ssh介绍

    SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

    由于它采用了公钥加密,整个过程是这样的:

    1)远程主机收到用户的登录请求,把自己的公钥发给用户。
    2)用户使用这个公钥,将登录密码加密后,发送回来。
    3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

    这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
    可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

    2、SSH使用

    ssh user@host

    释义:用户名user,登录远程主机host,(ssh默认端口是22,不加端口号就是默认的端口登陆)

    ssh -p 10000 user@host

    释义:用户名user,通过端口10000,登录远程主机host

    3、SSH使用捷径:公钥登录

    使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
    所谓"公钥登录",就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
    用ssh-keygen命令生成一个:

    ssh-keygen

    运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
    运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
    这时再输入下面的命令,将公钥传送到远程主机host上面

    ssh-copy-id user@host

    好了,从此登录,就不不用输入密码了。
    如果没用的话,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

    然后,重启远程主机的ssh服务。

    systemctl restart sshd.service

    SCP篇

    1、scp 远程文件拷贝命令介绍

    Linux scp命令用于Linux之间复制文件和目录。

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

    2、从本地复制到远程

    命令格式:
    
    建议使用这两个需要输入密码
    scp local_file remote_username@remote_ip:remote_folder 
    或者 
    scp local_file remote_username@remote_ip:remote_file 
    
    样例:
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
    
    第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名。
    
    复制目录命令格式:
    scp -r local_folder remote_username@remote_ip:remote_folder
    或者
    scp -r local_folder remote_ip:remote_folder
    
    =============================================================================================================

    3、从远程复制到本地

    从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
    
    应用实例:
    
    scp  remote_user@remote_ip:remote_file   local_file 
    
    scp -r remote_user@remote_ip:remote_dir  local_dir 
    
    scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
    scp -r root@www.runoob.com:/home/root/others/ /home/space/music/
    说明
    1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
    
    #scp 命令使用端口号 4588
    scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
    2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用
    参数说明:
    
    -1: 强制scp命令使用协议ssh1
    -2: 强制scp命令使用协议ssh2
    -4: 强制scp命令只使用IPv4寻址
    -6: 强制scp命令只使用IPv6寻址
    -B: 使用批处理模式(传输过程中不询问传输口令或短语)
    -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    -p:保留原文件的修改时间,访问时间和访问权限。
    -q: 不显示传输进度条。
    -r: 递归复制整个目录。
    -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
    -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
    -P port:注意是大写的P, port是指定数据传输用到的端口号
    -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
  • 相关阅读:
    idea设置全局ignore
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please ins
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistr
    kafka 删除 topic
    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    Centos中使用yum安装java时,没有jps的问题的解决
    Spring 整合Junit
    Spring纯注解配置
    Spring 基于注解的 IOC 配置
    打印java系统的信息
  • 原文地址:https://www.cnblogs.com/chenshengkai/p/12703190.html
Copyright © 2011-2022 走看看