Linux基本命令与SSH远程登录

Ban

Ban

ChangAn University

命令行快捷键

  • line editing
  • tab 自动补全
  • C+p 上一条命令 C+n 前一条
  • C+r

常用操作

  • 帮助

    • man
    • --help
  • pwd

    • print working dir
    • 显示现在所处的目录
  • ls

    • 不带参数就显示当前目录下的所有文件
    • 程序可以加参数
    • -l 显示详细信息
    • -h 人性化显示文件尺寸
    • -a 显示所有文件, 以 . 开头的文件是隐藏文件
    • 还可以带一个目录当参数,这样就会显示这个目录
    • 下面两个是等价的
      • ls -l -h
      • ls -lh
  • cd

    • cd /home
      ls -al
    • 改变当前目录 change directory
    • . 代表当前目录
    • .. 代表上级目录
    • cd 不带参数就回到默认的家目录
    • 每个用户都有一个家目录,默认在 /home/用户名
    • root 用户的家目录是 /root
  • touch

    • touch a.bsx
    • 如果 a.bsx 存在就更新修改时间
    • 如果 a.bsx 不存在就创建文件
  • mkdir

    • 创建一个目录
    • -p 可以一次性创建多层目录
    • mkdir -p a/b/c
  • cp

    • 复制出一个文件,用法如下
    • cp a.txt b.txt
    • 复制 a.txt 并把新文件取名为 b.txt
    • 复制目录要加上 -r 参数
    • cp -r a b
  • rmdir

    • 只能用来删除一个空目录
  • rm

    • 这个命令直接删除东西,很危险,一般不要用
    • 删除文件或者目录
    • -f 强制删除
    • -r 用来删除目录
  • mv

    • 移动文件或者文件夹
    • 也可以用来改名
    • mv a.txt b.txt
    • mv b.txt ../
    • mv b.txt ../bsx.txt
    • 可以用 mv xx /tmp 的方式来将文件放入临时文件夹
    • tmp是操作系统提供的临时文件夹,重启会删除里面的所有文件
  • cat

    • 显示文件内容
  • less head tail

    • less 可以前后退看文件 q 退出
    • head 可以显示文件的前 10 行
    • tail 可以显示文件的后 10 行
    • head 和 tail 有一个 -n 参数
    • head -n 20 a.bsx
  • echo

目录分布

主要如下:

  • /home 家目录
  • /root root 用户目录
  • /etc 放配置文件
  • /tmp 临时文件
  • /var/log 日志
  • /bin binary 命令存放的地方。有好几个 bin,不用理解。
  • /lib library 库

权限操作

  • sudo
    • 用管理员帐户执行程序
    • 比如安装程序或者修改一些系统配置都需要管理员权限
  • su
    • switch user, 切换用户
    • su bsx
    • sudo su
文件权限 文件类型 用户 用户组 文件大小 修改日期 文件名
-rw-rw-r-- 1 bsx bsx 10 11/09 20:28 b.bsx
drwxrwxr-x 2 bsx bsx 4096 11/09 20:28 tmp
文件类型 是否可读 是否可写 是否可执行
d r w x
- r w x
  • 三组 rwx 分表代表 所属用户|同组用户|其他用户
  • rwx 可以用数字表示为 421
  • 于是乎
r-- 就是 4
rw- 就是 6
rwx 就是 7
r-x 就是 5
  • chown
    • 改变文件的用户
    • chown bsx c.bsx
    • chown bsx:bsx c.bsx
  • chmod
    • 改变文件权限,不要用数字
    • chmod 666 root.bsx
    • 修改所属用户权限 chmod u+x tmp
    • 修改同组用户权限 chmod g+x tmp
    • 修改其他用户权限 chmod o+x tmp

信息查找

  • file
    • 显示文件的类型(不是百分之百准确)
  • uname
    • 显示操作系统的名字或者其他信息
    • uname -r
    • uname -a
  • which
    • which pwd
    • 显示 pwd 的具体路径
  • whereis
    • whereis ls
    • 显示更全面的信息
  • whoami
  • find
    • find /usr/bin/* -name py*
  • history
    • 查看历史命令
  • grep
    • 查找
    • grep a a.bsx

奇怪符号

# 这是注释
# $ 用来表示普通用户的提示符
$ ls
# # 还可以用来表示 root 用户的提示符
# service ssh restart
# ~ 家目录快捷方式
$ cd ~
$ pwd
# > 覆盖式重定向
$ echo hello > test.txt
$ echo hello > test.txt
$ cat test.txt
# >> 追加重定向
$ echo hello >> test.txt
$ echo hello >> test.txt
$ cat test.txt
# | 管道, 用来组合命令
$ history | grep touch
# `` 获取命令执行的结果
echo `pwd` > test.txt
# & 后台执行
$ python3 server.py &
# 可以用 fg 命令把一个在后台的程序拉到前台来
$ fg
# 可以用 Ctrl-z 来把一个前台的程序放到后台去挂起

其他命令

  • ps

    • 查看进程, 一般用下面的用法
    • ps ax
    • ps ax | grep python
    • 查看带 python 字符串的进程
    • ps axf
  • kill 和 killall 杀进程

    • ps ax 找到进程id (pid)
    • 普通杀: kill [pid] / kill -15 [pid] / kill -TERM [pid]
    • 强制杀: kill -9 [pid] / kill -KILL [pid]
    • 先用 kill 再用 kill -KILL,不要用带数字的
    • killall 是用进程名字来杀进程
  • 后台前台

    • fg
    • jobs
  • 快捷键

    • C-z 挂起到后台
    • C-c C-d 中断程序
  • reboot

    • 重启
  • shutdown

    • 关机
    • 可以用参数指定时间
  • halt

    • 关机

ssh

ssh 概念和使用

shell 你用来和电脑交互的一个软件, 特指用命令行交互 terminal

  • 本地查看 ssh 日志 ssh -v
  • ssh 流程
  • 服务器 ssh 日志 grep sshd /var/log/auth.log

FileZilla

  • ssh sftp
  • 连接服务器

ssh 设置

  1. 在本地生成公私钥
    • ssh-keygen 命令在本地 ~/.ssh 下生成公私钥 Windows 是在 C:\Users\xxx(用户名)\.ssh 这个文件夹下
    • id_rsa 是私钥 自己保存 不要给别人看
    • id_rsa.pub 是公钥 是要到处使用的 可以给别人看的
    • known_host 是记录你访问的服务器, 如果你重装了服务器, 需要删除这个文件
  2. 添加公钥到服务器
    1. 以 ubuntu 用户和对应密码配置 filezilla
    2. 在 filezilla 里打开服务器,把本地的 id_rsa.pub 上传到用户目录
    3. 在 cmder 下 ssh 服务器 ssh ubuntu@ip
    4. 切换成 root 用户 sudo su
    5. 确保 .ssh 文件夹存在 mkdir -p /root/.ssh
    6. 复制公钥到 root 用户的 ssh 配置下 cp /home/ubuntu/id_rsa.pub /root/.ssh/authorized_keys
  3. 测试公钥
    1. 测试之前重启 ssh 服务器 service ssh restart
    2. 关闭当前链接之前,先测试
      1. 另外开一个 cmder 窗口
      2. root 用户能免密登陆 ssh root@ip
  4. 关闭密码登录
    1. filezilla 重新配置,用户名是 root,验证方式是你本地的私钥
    2. 用 filezilla 编辑 /etc/ssh/sshd_config
    3. 确保 PasswordAuthentication 后面是 no
    4. 注意去掉 # 注释
    5. 重启 ssh 服务器 service ssh restart
    6. 关闭当前链接之前,先测试
      1. 另外开一个 cmder 窗口
      2. root 用户能免密登陆 ssh root@ip
      3. 其他用户登陆显示 Permission denied (publickey). ssh test@ip
  5. 之后统一用 root 登录
    1. cmder 下 ssh root 登录 ssh root@ip

软件安装和设置

apt update
apt install -y ssh git

安全

ssh

  • ssh key
  • 关闭密码登录

redis 漏洞

  • 以前默认是可以远程连接的
  • 以前默认是没有密码的
  • 有些 redis 安装后默认是 root 用户运行
    • 可以自定义路径保存配置文件
    • 覆盖 ~/.ssh/authorized_keys
  • mongo 默认也没有密码
  • 这几年出了很多类似事故
  • docker 会改 iptable,所以要用硬件防护墙

防火墙设置

安装

apt install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose

日志: grep -i ufw /var/log/kern.log

服务器部署项目

  • 在本地打jar包

  • 在本地运行

    java -Dfile.encoding=UTF-8 -jar xxx1.0.jar
  • 在服务器部署

    • 安装jdk

      apt install openjdk-11-jdk
    • 上传jar 或者用filezila

      scp xxx1.0.jar root@172.81.211.138:/tmp/server.jar
    • 运行

      java -jar /tmp/server.jar
    • 后台运行

      java -jar /tmp/server.jar &

参考书