vps 一些基本设置
本文以 Debian 10 x64 为例。
部分内容参考了这里。
修改密码
# 当前用户
passwd
其他初始化操作
# 重启后自动开启网络
echo 'auto ens3' >> /etc/network/interfaces
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
# 更新一下
apt-get update -y
apt-get upgrade -y
# 安装 ssh
apt-get remove openssh-client -y
apt-get install openssh-client -y
apt-get install openssh-server -y
# 添加配置
echo "alias ls='ls --color'" >> ~/.bashrc
echo "alias ll='ls -l'" >> ~/.bashrc
echo "export LANG='en_US.UTF-8'" >> /etc/profile
echo "export LC_CTYPE='zh_CN.UTF-8'" >> /etc/profile
echo "export TZ='Asia/Shanghai'" >> /etc/profile
echo "export TIME_STYLE='+%Y/%m/%d %H:%M:%S'" >> ~/.bashrc
source ~/.bashrc
常用命令
netstat -lntp # 查看端口占用
ps aux # 查看进程
# 查看指定目录使用情况
du -sh {目录}
# iptables
iptables -L # 查看
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT
# 删除防火墙规则,内容一样把 -I 换成 -D 就行了:
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT
配置 ssh 服务
ssh 客户端配置为/etc/ssh/ssh_config
。
ssh 服务器配置为 /etc/ssh/sshd_config
。
可查看配置文件内容,注释掉的为默认配置,取消注释的为修改过的配置。
使用密钥登录分为 3 步:
- 生成密钥(公钥与私钥);
- 放置公钥到服务器
~/.ssh/authorized_key
文件中; - 配置ssh客户端使用密钥登录。
生成秘钥可执行ssh-keygen -t rsa
。
服务器配置/etc/ssh/sshd_config
可参考这里,建议修改如下:
# Protocol 2,1
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
#禁用root账户登录,非必要,但为了安全性,请配置
#PermitRootLogin no
#有了证书登录了,就禁用密码登录吧,安全要紧
#PasswordAuthentication no
直接复制下面的脚本,修改{.ssh/id_rsa.pub}
为自己生成的公钥,执行即可:
echo 'RSAAuthentication yes' >> /etc/ssh/sshd_config
echo 'PubkeyAuthentication yes' >> /etc/ssh/sshd_config
echo 'AuthorizedKeysFile %h/.ssh/authorized_keys' >> /etc/ssh/sshd_config
mkdir ~/.ssh
# 可添加多个公钥到 ~/.ssh/authorized_keys
echo {.ssh/id_rsa.pub} >> ~/.ssh/authorized_keys
service ssh restart
ssh 登录报错
使用 putty 时配置好秘钥登录,提示Couldn't load this key (OpenSSH SSH-2 private key(old PEM format))
。可参考此篇文章。简述如下:
- 使用 puttygem.exe
- 单击
Conversations
下拉列表的Import Key
- 选中自己的私钥(
~/.ssh/id_rsa
) - 可修改
key comment
(描述),选择Save private key
,保存为后缀是.ppk
的文件 - 在 putty.exe 的 settings -> Connection -> SSH -> Auth,设置私钥为刚保存的
*.ppk
文件
奇怪问题
使用 testing 分支,更新 openssh-server 到最新版本后,可能在重启 debian 后过很久才可以 ssh 登录。通常发生在 debian 安装在虚拟机中时,若使用 console 登录一次 debian,则远程的 ssh 即可立即登录,否则需等待很久才可以登录甚至无法登录。
想到的解决办法,将 openssh-server 版本降级。
apt install openssh-client/stable
apt install openssh-server/stable openssh-sftp-server/stable
# 阻止更新
echo openssh-client hold | sudo dpkg --set-selections
echo openssh-server hold | sudo dpkg --set-selections
echo openssh-sftp-server hold | sudo dpkg --set-selections
# 恢复更新
echo openssh-client install | sudo dpkg --set-selections
echo openssh-server install | sudo dpkg --set-selections
echo openssh-sftp-server install | sudo dpkg --set-selections
另外也可以在官网安装最最新版的 openssh-server:参考这里。
putty 修改backspace
键乱码
settings -> terminal -> keyboard ,The Backspace key
勾选“Control-H”,The Home and End keys
勾选“VT100+”。
安装 Brook Server
『原创』一个优秀的跨平台 Socks5代理软件 —— Brook 一键安装管理脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/brook.sh && chmod +x brook.sh && sh brook.sh
# 其他操作
启动:/etc/init.d/brook start
停止:/etc/init.d/brook stop
重启:/etc/init.d/brook restart
查看状态:/etc/init.d/brook status
安装目录:/usr/local/brook
配置文件:/usr/local/brook/brook.conf
日志文件:/usr/local/brook/brook.log(注意正常情况下,日志是不会记录使用信息的,只会记录报错)
备用:在我的 gitee 私人仓库。
安装 Goflyway Server
『原创』Go语言轻量化 HTTP Tunnel 代理工具 —— GoFlyway 一键安装管理脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/goflyway.sh && chmod +x goflyway.sh && bash goflyway.sh
# 伪装 http 站点时可选填写
http://ftp.jp.debian.org/debian/
有关使用 Cloudflare CDN 时端口限制的说明
安装 server-status
『原创』多服务器 云探针、云监控 —— ServerStatus 一键管理脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/status.sh && chmod +x status.sh
# 客户端管理菜单
./status.sh c
# 服务端管理菜单
./status.sh s
如果在安装 server-status 之前安装了 Caddy,设置 http 服务时选择 N。并手动配置 Caddy 的配置文件设置 root 目录为/usr/local/ServerStatus/web
(安装服务端时有提示)
安装 Caddy
『原创』Go语言 跨平台支持的极简 HTTP Server —— Caddy一键安装脚本
利用 Caddy 非常简单的部署 反向代理/镜像(支持自签SSL证书)
利用 Caddy FileBrowser扩展 非常简单的部署 私人网盘/在线文件管理器
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.webdav,tls.dns.cloudflare
# 新建虚拟主机文件夹
mkdir /home/www/ && mkdir /home/www/goflyway
配置 Caddy
默认 Caddy 会监听 80 和 443 端口,无论配置与否。
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/
# 域名反向代理
echo "http://toyoo.pw {
gzip
proxy / http://xxx.xx
}" >> /usr/local/caddy/Caddyfile
# 手动指定SSL证书,不会重定向http到https,需手动配置redir重定向
echo "http://xxx.xxx ,http://www.xxx.xxx {
redir https://xxx.xxx{url}
}
xxx.xx {
gzip
tls /root/xxx.crt /root/xxx.key
proxy / https://www.google.com.hk
}" > /usr/local/caddy/Caddyfile
# 网页加密
basicauth /PATH user passwd
# 日志。放到 /tmp 文件夹的话,每次重启都会自动清空日志的。
log /tmp/caddy_1.log
启动显示成功,但是实际未运行,应该去查看启动日志:
tail -f /tmp/caddy.log
简单设置:
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
# :8080 指的是监听 0.0.0.0:8080 。
# /home/www/goflyway/ 这是虚拟主机文件夹,如果不一样请修改
echo ":8080 {
root /home/www/goflyway/
timeouts none
gzip
}" > /usr/local/caddy/Caddyfile
若做成目录列表程序下载网站,添加browse
即可。
# 以下全部内容是一个整体,是一个命令,全部复制粘贴到SSH软件中并一起执行!
# :8080 指的是监听 0.0.0.0:8080 。
# /home/www/goflyway/ 这是虚拟主机文件夹,如果不一样请修改
echo ":8080 {
root /home/www/goflyway/
timeouts none
gzip
browse
}" > /usr/local/caddy/Caddyfile
启动 Caddy:/etc/init.d/caddy start
filebrowser
原 filebrowser 插件现已独立,官网:https://filebrowser.xyz。
基本配置:
curl -fsSL https://filebrowser.xyz/get.sh | bash
filebrowser -d /usr/local/caddy/filebrowser.db config init
filebrowser -d /usr/local/caddy/filebrowser.db config set -p 1111
filebrowser -d /usr/local/caddy/filebrowser.db config set --locale zh-cn
filebrowser -d /usr/local/caddy/filebrowser.db config set --log /usr/local/caddy/filebrowser.log
filebrowser -d /usr/local/caddy/filebrowser.db config set --baseurl /admin
filebrowser -d /usr/local/caddy/filebrowser.db users add root password --perm.admin
安装代理缓存服务器 squid
apt install squid
官方 wiki:https://wiki.squid-cache.org/
也可在另一篇文章查看sqiud
的具体配置详解。
命令开机自动运行
使用update-rc.d
命令:
将执行的脚本放到/etc/init.d/
并在文件开头添加:
#!/bin/bash
### BEGIN INIT INFO
# Provides: xda
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: xda's default scripts
# Description: Run some scripts when os start
### END INIT INFO
check_running(){
PID=`ps -ef |grep "$1" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'`
if [[ ! -z ${PID} ]]; then
return 0
else
return 1
fi
}
check_running "filebrowser"
if [[ $? -eq 0 ]]; then
kill -9 ${PID}
fi
filebrowser -d /usr/local/caddy/filebrowser.db &
exit 0
然后执行:
update-rc.d <NAME> defaults
下面是网上找的方法
将命令添加到文件:
nano /etc/rc.local
注意文件开头添加:
#! /bin/sh
# -*- coding: utf-8 -*-
命令前加上nohup
,防止命令执行未结束导致无法往下执行。
certbot 获得 https 证书
Let’s Encrypt 的官方客户端。官网文档:https://certbot.eff.org/docs/。
acme.sh 自动配置 https 证书
访问http://acme.sh,会自动跳转到 github:https://github.com/acmesh-official/acme.sh。
wiki:https://github.com/acmesh-official/acme.sh/wiki/。
安装与更新
# 安装
curl https://get.acme.sh | sh
# OR
wget -O - https://get.acme.sh | sh
# 更新
acme.sh --upgrade
# 开启自动更新
acme.sh --upgrade --auto-upgrade
# 禁止自动更新
acme.sh --upgrade --auto-upgrade 0
安装结束,根据输出可看到:
-
自动安装到
~/.acme.sh/
。并设置一个alias
,可在~/.bashrc
里查看。 -
安装了
cron job
。用于自动更新证书。可运行crontab -l
查看。
发布证书
仅发布:
acme.sh --issue -d example.com -w /home/wwwroot/example.com
可以多个域名,多个
-d
。
发布的证书被放在了~/.acme.sh/example.com/
。
不要用 web 服务器直接使用~/.acme.sh/
里面的证书。必须复制出来再使用。下面可使用--install-cert
来设置证书保存的位置。
使用 Apache 发布:
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
使用 Nginx 发布:
acme.sh --installcert -d chandao.test.com --key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key --fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer --reloadcmd "service nginx force-reload"
上面的方式必须保证web服务器使用的是80/443
端口。若端口封堵了,则需要 DNS 手动模式或者使用 DNS API 模式。
DNS 手动模式
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
按提示设置域名的txt 解析记录
,等 DNS 解析生效,然后运行:
acme.sh --renew -d example.com
DNS API
如使用 CloudFlare,获取API key 后,运行【Test this token】里的命令,会获得CF_Account_ID
。
运行一次:
# Global API Key
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxx@example.com"
# new API Token
export CF_Token="xxxx"
export CF_Account_ID="xxxx"
export CF_Zone_ID="xxxx"
发布证书:
acme.sh --issue --dns dns_cf -d example.com -d www.example.com
CF_Token
和CF_Account_ID
等变量会保存到~/.acme.sh/account.conf
,下次运行acme.sh
会自动获取
小内存增加 SWAP
dd if=/dev/zero of=/home/swap bs=1024 count=1024000 # 生成SWAP空间文件1G(bs*count)
/sbin/mkswap /home/swap # 创建SWAP分区
/sbin/swapon /home/swap # 激活SWAP分区
echo '/home/swap swap swap defaults 0 0' >> /etc/fstab # 重启后可以自动挂载
安装 docker
推荐资料:
https://blog.csdn.net/u012954706/article/details/79592099
https://yq.aliyun.com/articles/110806
按照官方文档:https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce。
Set up the repository
Update the apt package index:
apt-get update
Install packages to allow apt to use a repository over HTTPS:
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add
Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.
apt-key fingerprint 0EBFCD88
Use the following command to set up the stable repository
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
Install docker-ce
Update the apt package index.
apt-get update
Install the latest version of Docker CE, or go to the next step to install a specific version:
apt-get install docker-ce # 可加参数 -y
Verify that Docker CE is installed correctly by running the hello-world image.
docker run hello-world
后续可使用docker pull xxx
来安装 docker 镜像,镜像被安装在/var/lib/docker/
目录。存放在该目录下的containers
子目录。
使用非 80/443 端口时的 CDN 设置
cloudflare cdn 端口使用说明:https://developers.cloudflare.com/fundamentals/reference/network-ports/
Network ports compatible with Cloudflare's proxy
By default, Cloudflare proxies traffic destined for the HTTP/HTTPS ports listed below.
HTTP ports supported by Cloudflare
80
2052
2082
2086
2095
8080
8880
HTTPS ports supported by Cloudflare
443
2053
2083
2087
2096
8443
Ports supported by Cloudflare, but with caching disabled
2052
2053
2082
2083
2086
2087
2095
2096
8880
8443
亲测:若在 CloudFlare 开启了
Always use HTTPS
,则设置非 80 端口的 http 则会无法访问。(因为会自动跳转为 https 访问)。可手动配置 rewrite http to https。在此,强烈建议所有服务均使用 https 访问。