Skip to content

Instantly share code, notes, and snippets.

@XiongJingzhi
Last active September 10, 2020 08:16
Show Gist options
  • Save XiongJingzhi/e0e59ba4658f278d4b14b6008f2170ef to your computer and use it in GitHub Desktop.
Save XiongJingzhi/e0e59ba4658f278d4b14b6008f2170ef to your computer and use it in GitHub Desktop.
Linux系列
Centos7使用SSH,禁用密码登录方法:
1、
# 若没安装openssh,则yum install openssh-server
# 开启sshd, sudo systemctl enable sshd
# sudo systemctl start sshd 或者 sudo service sshd start
# 开启防火墙的22端口
# sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
# sudo service firewalld restart
2、
# 编辑/etc/ssh/sshd_config
# 将PasswordAuthentication参数值修改为no: PasswordAuthentication no
# 重启ssh服务:systemctl restart sshd.service
CentOS防火墙:
1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
2、systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
3、配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
那怎么开启一个端口呢
添加
firewall-cmd --zone=public --add-port=8080-8085/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=80/tcp
删除(是规则,只能删除8080-8085)
firewall-cmd --zone=public --remove-port=80/tcp --permanent
查看所有打开的端口:
firewall-cmd --zone=public --list-ports
查看开启的端口和服务:
firewall-cmd --permanent --list-services
--zone是一套服务方案方案,etc/firewalld里zones目录下,一般pulic是运行ssh和dhcpv6-client
1. 最小化安装的Centos7系统并没有nano、vim、wget、curl、ifconfig、lsof命令,这里首先安装一下:
yum -y install nano vim wget curl net-tools lsof
2. 安装zip压缩命令
yum -y install unzip
3. 安装unzip压缩命令
yum -y install unzip
4. 使用vi编辑resolv.conf文件
vi /etc/resolv.conf #在最后加入:nameserver 8.8.8.8
5.编辑文件/etc/resolv.conf
echo “nameserver 8.8.8.8” >>/etc/resolv.conf
安装【zsh】
yum install -y zsh
chsh -s /bin/zsh
安装【oh my zsh】
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
安装supervisor
yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务
# systemctl start supervisord # 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程
supervisord -c /etc/supervisord.conf
在supervisor.conf里最后一句
[include]
files = supervisord.d/*.ini
因此,可以在supervisord.d/*.ini,增加配置
为了高内聚,在项目新建配置
ln -s /var/www/bbs/bbs.conf /etc/supervisord.d/bs.ini
编辑文件如下:
[program:DeployLinux] #DeployLinux 为程序的名称
command=dotnet DeployLinux.dll #需要执行的命令
directory=/home/publish #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=root #用户
stopsignal=INT
autostart=true #是否自启动
autorestart=true #是否自动重启
startsecs=3 #自动重启时间间隔(s)
stderr_logfile=/var/log/ossoffical.err.log #错误日志文件
stdout_logfile=/var/log/ossoffical.out.log #输出日志文件
完成之后可以supervisorctl reload, 重载程序
安装nginx
rpm -ql nginx 可以知道安装nginx安装的位置
编辑/etc/yum.repo.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install nginx
安装Redis
1、yum install redis --查看是否有redis yum 源
2、yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
3、 yum --enablerepo=remi install redis -- 安装redis数据库
4、service redis start Redirecting to /bin/systemctl start redis.service --开启redis服务
  redis-server /etc/redis.conf --开启方式二
5、ps -ef | grep redis -- 查看redis是否开启
6、redis-cli -- 进入redis服务
7、redis-cli shutdown --关闭服务
8、开放端口6379、6380的防火墙
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT 开启6379
/sbin/iptables -I INPUT -p tcp --dport 6380 -j ACCEPT 开启6380
/etc/rc.d/init.d/iptables save 保存
9、使用redis desktop manager连接redis
安装mangoBD
/etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
yum install mongodb-org
centos查看包
rpm -qa |grep mongodb --可以通过软件名称查看具体的软件包
rpm -ql mongodb-org-server
系统配置
程序安装
PATH
命令
参数
权限
用户
用户组
常用操作
pwd
print working dir
显示现在所处的目录
ls
不带参数就显示当前目录下的所有文件
程序可以加参数
-l 显示详细信息
-h 人性化显示文件尺寸
-a 显示所有文件, 以 . 开头的文件是隐藏文件
还可以带一个目录当参数,这样就会显示这个目录
下面两个是等价的
ls -l -h
ls -lh
cd
cd Desktop
改变当前目录
. 代表当前目录
.. 代表上级目录
cd 不带参数就回到默认的家目录
每个用户都有一个家目录,默认在 /home/用户名
root 用户的家目录是 /root
cp
复制出一个文件,用法如下
cp a.txt b.txt
复制 a.txt 并把新文件取名为 b.txt
复制目录要加上 -r 参数
cp -r a b
mkdir
创建一个目录
-p 可以一次性创建多层目录
mkdir -p a/b/c
rmdir
只能用来删除一个空目录
rm
这个命令直接删除东西,很危险,一般不要用
删除文件或者目录
-f 强制删除
-r 用来删除目录
mv
移动文件或者文件夹
也可以用来改名
mv a.txt b.txt
mv b.txt ../
mv b.txt ../gua.txt
可以用 mv xx /tmp 的方式来将文件放入临时文件夹
(/tmp是操作系统提供的临时文件夹,重启会删除里面的所有文件)
cat
显示文件内容
tac
反过来显示文件内容
nl
显示内容并附带行号
more less head tail
more 可以分屏分批看文件内容
less 比 more 更高级,可以前后退看文件
head 可以显示文件的前 10 行
tail 可以显示文件的后 10 行
head 和 tail 有一个 -n 参数
head -n 20 a.gua
touch
touch a.gua
如果 a.gua 存在就更新修改时间
如果 a.gua 不存在就创建文件
目录分布
权限操作
sudo
用管理员帐户执行程序
比如安装程序或者修改一些系统配置都需要管理员权限
su
switch user, 切换用户
su gua
su root
-(常规文件)、d(目录)、l(符号链接)、c(字符特殊设备)、b(模块特殊设备)、p(FIFO)、s(套接字)
文件权限 文件类型 用户 用户组 文件大小 修改日期 文件名
-rw-rw-r-- 1 gua gua 10 11/09 20:28 b.gua
drwxrwxr-x 2 gua gua 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 (change own)
改变文件的用户
chown gua c.gua
chown gua:gua c.gua
chmod (change mode)
改变文件权限
chmod 666 root.gua
chmod +x root.gua
chmod -x tmp
adduser username (default add group)
按提示输入密码
信息查找
file
显示文件的类型(不是百分之百准确)
uname
显示操作系统的名字或者其他信息
uname -r
uname -a
which
which pwd
显示 pwd 的具体路径
whereis
whereis ls
显示更全面的信息
whoami
find . -name ""
-type f
ls -l | grep "^-" | wc -l
统计文件数量
ls -l | grep "^d" | wc -l
统计文件夹数量
find -type d|xargs chmod 745 // 只修改文件夹权限
find -type f|xargs chmod 644 // 只修改文件权限
奇怪符号
~ 家目录快捷方式
> 覆盖式重定向
>> 追加重定向
| 管道, 很麻烦 以后说
`` 获取命令执行的结果
& 后台执行
python3 server.py &
可以用 fg 命令把一个在后台的程序拉到前台来
可以用 Ctrl-z 来把一个前台的程序放到后台去挂起
() 开新的子进程shell执行(不用掌握这一条, 因为几乎没人用)
命令配置符
\# 代表超级用户
$ 代表普通用户
nohup
no hang up(不挂起, 后台跑)
nohup command >out.file 2>&1 &
“1”表示文件描述符 1,表示标准输出,“2”表示文件描述符 2,意思是标准错误输出,“2>&1”表示标准输出和错误输出合并了
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
history
查看历史命令
grep
查找
这两个一般配合使用
history | grep touch
xargs
传递参数的一个过滤器,也是组合多个命令的一个工具
cat test.txt | xargs -n3
top
任务管理器
ps
查看进程, 一般用下面的用法
ps ax
ps ax | grep python
查看带 python 字符串的进程
kill 和 killall 杀进程
用 ps ax 找到进程id (pid)
kill [pid]
kill -9 [pid]
kill -15 [pid]
killall 是用进程名字来杀进程
后台前台
fg
jobs
查看端口
netstat -ap | grep 6301
快捷键
C-z 挂起到后台
C-c 中断程序
service application restart/stop/start
服务 重启、停止, 权限大
reboot
重启
shutdown
关机
可以用参数指定时间
halt
关机
passwd username
修改密码
安装,并启动
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
1. apt install mongodb-org
2. pgrep mongo -l // 查看进程是否已经启动
3. mongo // 此时可进入数据库
手动启动
1. locate mongo // 查看mongo安装位置
2. 可查看到mongod(数据库),mongo(数据日志)
apt update
apt install mariadb-server
mysql_secure_installation
enter, 输入root密码,移除测试用户,允许root远程登录,删掉测试数据库test,重新加载权限表
systemctl status mysql 查看mysql状态
systemctl start mysql, 开启
update-rc.d mysql defaults, 随开启默认启动
mysql 登陆mysql, mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'*.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
grant all on *.* to 'XF用户名'@'%(全部ip)' identified by 'aa123456123(设置密码)' with grant option;
FLUSH PRIVILEGES;
select User, host from mysql.user; // 此时有XF用户,host为%
nano /etc/mysql/mariadb.conf.d/50-server.cnf 注销 bind-address = 127.0.0.1
systemctl restart mysql
ufw allow 3306
update-rc.d mysql defaults
新建数据库,一般包含中文字符集选utf-8,utf8mb4(imoji), 排序大小写不敏感,utf8_general_ci(case insensitive)
命令格式:grant privilegesCode on dbName.tableName to username@host identified by "password";
grant all privileges on zhangsanDb.* to zhangsan@'%' identified by 'zhangsan';
flush privileges;
show grants for 'zhangsan';
privilege type: all privileges, select, delete, update, create, drop;
dbName.tableName表示授予权限的具体库或表,常用的有以下几种选项:
.:授予该数据库服务器所有数据库的权限。
dbName.*:授予dbName数据库所有表的权限。
dbName.dbTable:授予数据库dbName中dbTable表的权限。
username@host表示授予的用户以及允许该用户登录的IP地址。其中Host有以下几种类型:
localhost:只允许该用户在本地登录,不能远程登录。
%:允许在除本机之外的任何一台机器远程登录。
192.168.52.32:具体的IP表示只允许该用户从特定IP登录
password指定该用户登录时的面
flush privileges表示刷新权限变更
修改密码
update mysql.user set password = password('zhangsannew') where user = 'zhangsan' and host = '%';
flush privileges;
删除用户
drop user zhangsan@'%';
常用命令组
create user zhangsan identified by 'zhangsan';
grant all privileges on zhangsanDb.* to zhangsan@'%' identified by 'zhangsan';
flush privileges;
创建了用户zhangsan,并将数据库zhangsanDB的所有权限授予zhangsan。如果要使zhangsan可以从本机登录,那么可以多赋予localhost权限:
grant all privileges on zhangsanDb.* to zhangsan@'localhost' identified by 'zhangsan';
//home 目录
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
//加入到shell配置
export PYENV_ROOT="$HOME/.pyenv"
export PATH=$PYENV_ROOT/shims:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
//全局
# 查看当前版本
pyenv version
# 查看所有版本
pyenv versions
# 查看所有可安装的版本
pyenv install --list
# 安装指定版本
pyenv install 3.6.5
# 安装新版本后rehash一下
pyenv rehash
# 删除指定版本
pyenv uninstall 3.5.2
# 指定全局版本
pyenv global 3.6.5
# 指定多个全局版本, 3版本优先
pyenv global 3.6.5 2.7.14
# 实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的
// 虚拟环境
# 创建一个3.6.5版本的虚拟环境, 命名为v365env, 然后激活虚拟环境
$ pyenv virtualenv 3.6.5 v365env
$ pyenv activate v365env
# 关闭虚拟环境
$ pyenv deactivate v365env
## CREATE
1. create table
``` sql
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '索引',
`name` VARCHAR(255) DEFAULT NULL COMMENT '名字',
`gender` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '0: 未知; 1: 男性; 2: 女性',
`point` DECIMAL(10, 2) DEFAULT NULL COMMENT '积分',
`icon` VARCHAR(500) DEFAULT NULL,
`is_deleted` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '0: 未删除; 1: 已删除',
`created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '索引',
`user_id` BIGINT(20) NOT NULL COMMENT '用户id',
`point` DECIMAL(10, 2) DEFAULT NULL COMMENT '积分',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表';
-- 快照
CREATE TABLE user_snapshot SELECT * FROM `user` WHERE id = 1;
-- show
SHOW CREATE TABLE user;
-- primary key A primary key is a field in a table which uniquely identifies each row/record in a database table.
-- 一般用与业务无关的id (uuid不常见)作为主键,联合主键不太常见
-- foreign key
-- 阿里JAVA规范【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
ALTER TABLE `order`
ADD CONSTRAINT fk_user_id
FOREIGN KEY (user_id)
REFERENCES `user` (id);
ALTER TABLE `order`
DROP FOREIGN KEY fk_user_id;
-- many to many 多对对,通过中间表定义
-- index 索引目录 B树,UNIQUE 在业务层, KEY 普通索引 MUL multiple
CREATE TABLE `account` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`account_id` BIGINT(20) NOT NULL DEFAULT 0 COMMENT '账户id',
`user_id` BIGINT(20) NOT NULL COMMENT '用户id',
`banlance` DECIMAL(10, 2) DEFAULT 0 COMMENT '余额',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_account_id` (`account_id`),
KEY `ix_banlance` (`banlance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='账户表';
-- WHERE 条件使用 index column 作为条件
```
2. CREATE row data
``` sql
INSERT INTO `user` (id, name, gender, point, icon, create_time, is_deleted) VALUES (1, '张1', 1, 10, NUll, 0, NULL);
INSERT INTO `user` (name, gender, point, create_time) VALUES ('张2', 2, 11, '2020-01-01 13:27:21');
INSERT INTO `user` (name, point, gender, create_time) VALUES ('张3', 0, 1, '2020-02-01 13:27:21'), ('张3', 10.23, 1, '2020-02-01 13:27:21');
```
## QUERY Retrieve
1. query data
``` sql
-- basic
SELECT 列名 (或者*,表示所有列) FROM 表名 WHERE 筛选条件;
SELECT name, gender, create_time FROM `user` WHERE id >= 2;
-- in
SELECT name, gender FROM `user` WHERE id IN (1, 2);
-- and
SELECT * FROM `user` WHERE create_time >= '2020-01-01 00:00:00' AND create_time < '2020-06-01 00:00:00';
-- or
SELECT * FROM `user` WHERE create_time >= '2020-01-01 00:00:00' OR id = 1;
-- NOT <>
SELECT * FROM `user` WHERE id <> 2;
-- order desc asc
SELECT name, gender FROM `user` WHERE id >= 2 ORDER BY create_time DESC;
-- limit
SELECT name, gender FROM `user` WHERE id >= 2 ORDER BY create_time DESC LIMIT 2;
-- offset
SELECT id, name, gender FROM `user` ORDER BY create_time DESC LIMIT 1 OFFSET 1;
-- multiple conditions
SELECT * FROM `user`
WHERE create_time >= '2020-01-01 00:00:00'
ORDER BY create_time, update_time DESC;
-- aggregate function COUNT, SUM, AVG, MIN, MAX
-- COUNT 不统计NULL, 去重需用DISTINCT
SELECT COUNT(*) FROM `user`;
SELECT COUNT(id) FROM `user`;
SELECT COUNT(icon) FROM `user`;
SELECT COUNT(DISTINCT name) FROM `user`;
-- SUM
SELECT id, point, SUM(point) FROM `user`
WHERE id >= 2;
-- AVERAGE
SELECT AVG(point) FROM `user`;
-- GROUP order WHERE > GROUP >
SELECT id, point, AVG(point) FROM `user`
WHERE id >=2
GROUP BY id;
-- HAVING aggregate funciton
SELECT id, point, AVG(point) FROM `user`
WHERE id >=2
GROUP BY id
HAVING AVG(point) >= 10;
-- multiple table query, 一般不用
-- column number = sum of two columns numbre
-- 以前一张表每行和后一张全部行组成新的行 行数为 n * m
-- JOIN, INNER JOIN
SELECT u.name, u.gender, a.banlance FROM `account` a
INNER JOIN `user` u
ON a.user_id = u.id;
-- RIGHT JOIN, LEFT JOIN, FULL OUTER JOIN
-- INNER JOIN 两张表都存在, RIGHT 右表存在, LEFT 左表, 剩余用NULL填充
```
## UPDATE
``` sql
-- INSERT
INSERT INTO 表名 (字段1, 字段2...) VALUES (值1, 值2...), ...;
-- UPDATE
UPDATE `user`
SET name = '球球'
WHERE id = 1;
-- DELETE
DELETE FROM `user` WHERE id = 2;
-- REPLACE or INSERT
REPLACE INTO `user` (id, name, gender, point) VALUES (1, '小明', 1, 12.22);
-- INSERT or IGNORE
INSERT IGNORE INTO `user` (id, name, gender, point) VALUES (1, 'xx', 1, 233);
-- INSERT or UPDATE
INSERT INTO `user` (id, name, gender, point) VALUES (1, 'xxx', 1, 123.33) ON DUPLICATE KEY UPDATE name = '谢谢', gender = 2, point = 233.33;
```
## MySQL Client
```
SHOW DATABASES;
CREATE DATABASE test;
DROP DATABASE test;
USE test;
SHOW TABLES;
DESC user;
SHOW CREATE TABLE user;
CREATE TABLE user;
ALTER TABLE user ADD COLUMN name VARCHAR(20) NOT NULL;
ALTER TABLE user DROP COLUMN name;
EXIT;
```
## Transaction 事务
1. Atomic 原子性,事务中所有SQL语句,要么全部执行,要么全不执行
2. Consistent 一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;
3. Isolation 隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离
4. Duration 持久性,事务完成后,对数据库数据的修改被持久化存储。
``` sql
-- 显式事务
BEGIN
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 正常情况,全部成功执行
COMMIT
-- 异常情况,则回滚
ROLLBACK
```
### isolation level
1. read uncommit
# ===
# 生成 ssh-key
# ===
# Mac 用户直接打开终端输入命令
# Win 用户安装 Github Desktop 离线包后, 打开桌面的 git shell 程序, 在里面输入下面的命令
#
# 1. 在本机生成 ssh key 公钥私钥
# 注意 下面的 mykey 随便换一个你喜欢的名字, 这是一个标注, 方便你看的
ssh-keygen -C mykey
# 会提示你生成的文件的地址, 并且让你输入密码, 你不要输入密码, 直接回车
#
# 这样你就得到了一对 ssh-key, 这是用于登录服务器用的
# 默认你会得到两个文件
# id_rsa 是私钥 自己保存 不要给别人看
# id_rsa.pub 是公钥, 是要到处使用的
# ===
# 重建服务器并且配置 ssh-key
# ===
#
# 去 vultr 的管理界面
# 先删除(Destory)现有的服务器
# 新建服务器的时候, 把刚才才生成的 id_rsa.pub 文件(用 atom/pycharm 可以打开)里面的内容加入到 ssh-key 步骤中
# 这样你就可以不用密码, 自动登录服务器了(windows 用户请看「windows上用bitvise软件使用sshkey登录.pdf」这个文件)
# 如果你不想重建服务器, 配置 ssh-key 的方法如下
# 在服务器把本机生成的 public key 添加到 /root/.ssh/authorized_keys 文件中
# 1 用 root 用户登录到服务器, 创建 .ssh 目录
cd /root
mkdir .ssh
# 2 编辑 authorized_keys 文件, 把刚才生成的 id_rsa.pub 文件里面的内容粘贴进去并保存退出
# 注意, 这里可以粘贴多个 key, 一行一个
nano .ssh/authorized_keys
# 在本机上可用git bash尝试
# ssh root@ipaddress||domain
# 注意 Are you sure you want to continue connecting (yes/no)?
# 要回答 yes
# 本机使用Bitvise, 点击Client key manager
# import, 点击all文件,找到id_rsa私钥,导入后关闭
# initial method: publickey 选择刚刚生成的文件
# 登录成功
# Ubuntu禁用密码登陆
# nano /etc/ssh/sshd_config
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
# ===
# 服务器初始化配置, 复制这些命令粘贴到服务器终端中执行
# ===
#
# 安装 配置 打开 ufw 防火墙
apt-get install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw default deny incoming
ufw default allow outgoing
ufw status verbose
ufw enable
# 安装必备软件
apt-get install git python3 python3-pip python3-setuptools supervisor mongodb redis-server zsh
# 安装 oh-my-zsh 配置(方便你使用命令行的配置)
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
# 安装 gunicorn
pip3 install gunicorn pymongo
# ===
# 服务器中文编码问题
# ===
#
# 编辑下面的文件, 不要拼错
nano /etc/environment
# 加入下面的内容, 保存退出
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
===
gunicorn wsgi --bind 0.0.0.0:2000
===
#!/usr/bin/env python3
这是把代码部署到 apache gunicorn nginx 后面的套路
➜ ~ cat /etc/supervisor/conf.d/xx.conf
supervisor监护程序,重启、崩溃后自动重启
[program:todo]
command=/usr/local/bin/gunicorn wsgi --bind 0.0.0.0:2000 --pid /tmp/todo.pid
directory=/root/web13
autostart=true
可以使用
supervisorctl restart todo
安装nginx
apt-get install nginx
service start nginx
systemctl stop nginx.service
虚拟机配置在sites-enabled里
ln -s /var/www/bbs/bbs.nginx /etc/nginx/sites-enabled/bbs
1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)
例如scp root@192.168.0.101:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)
2、上传本地文件到服务器
scp /path/filename username@servername:/path
例如scp /var/www/test.php root@192.168.0.101:/var/www/ 把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中
3、从服务器下载整个目录
scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)
例如:scp -r root@192.168.0.101:/var/www/test /var/www/
4、上传目录到服务器
scp -r local_dir username@servername:remote_dir
例如:scp -r test root@192.168.0.101:/var/www/ 把当前目录下的test目录上传到服务器的/var/www/ 目录
1.开通root用户
sudo passwd root
sudo nano /etc/ssh/sshd_cofig
修改PermitRootLogin yes
2. 禁用ubuntu用户
su root
nano /root/.ssh/authorized_keys
nano /etc/passwd
//找到ubuntu用户 在该行的最后面加上/nologin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment