首页
关于
Search
1
Win10/win11 专业版 激活密钥(注册码)
871 阅读
2
欢迎使用 Typecho
720 阅读
3
SeuratData数据集-包含了各种常用的公共数据
360 阅读
4
如何恢复状态
254 阅读
5
读后感11-17
231 阅读
默认分类
想做的事
Python
读后感
日记
随笔
音乐盒
Kali
视频
番茄钟
登录
Search
连祈
累计撰写
83
篇文章
累计收到
13
条评论
首页
栏目
默认分类
想做的事
Python
读后感
日记
随笔
音乐盒
Kali
视频
番茄钟
页面
关于
搜索到
69
篇与
的结果
2024-11-05
SSH端口转发的坑
端口转发分为本地端口转发、远程端口转发、动态端口转发、本地端口转发是把远程的端口拿到内部来,感觉没啥用。远程端口转发等效于反向代理,把内网的端口拿到公网去。动态端口转发我暂时还没用到。其中我遇到的问题是 配置了ssh远程端口转发后无法公网访问 后来发现是因为我没在远程主机的ssh设置里打开允许外网访问#/etc/ssh/sshd_config AllowTcpForwarding yes#允许用户通过 SSH 创建 TCP 转发连接,这可以用于实现端口转发。禁用此功能(设置为 no)将阻止任何类型的 TCP 转发,包括本地、远程和动态转发。默认为YES GatewayPorts no#控制是否允许远程主机通过 SSH 连接到转发的端口。默认为no TCPKeepAlive yes#当设置为 yes 时,TCP 会话将在指定时间内发送心跳包,以确保连接处于活动状态。这有助于在网络不稳定时防止连接意外中断。 ClientAliveInterval 60#设置客户端存活检测的间隔时间。该参数指定 SSH 服务器在等待多长时间后向客户端发送存活消息(心跳)。在此示例中,服务器每 60 秒向客户端发送一次请求,以确认客户端仍然在线。 ClientAliveCountMax 1440#设置客户端存活检测的最大失败次数。该参数指定 SSH 服务器在终止连接之前,允许连续未响应的存活消息的最大次数。在此示例中,如果客户端在 1440 次存活消息中未响应,服务器将关闭与客户端的连接。可算把我好一顿折腾。详细参考可见 SSH端口转发SSH 端口转发又称为 SSH 隧道,是通过 SSH 协议建立隧道,实现本地主机和远程主机的端口绑定,数据由 SSH 协议进行加密传输。SSH 有三种端口转发模式:本地端口转发(Local port forwarding);远程端口转发(Remote port forwarding);动态端口转发;本文介绍 SSH 的这三种端口转发和持久化工具 autossh。本地端口转发SSH 绑定本地端口,将本地端口的访问转发到远端。使用 -L 参数,格式为 本地端口:目标主机:目标主机端口。假设本地主机为 host1,host1 能够访问 host2, host2 能够访问 host3,但 host1 无法直接访问 host3。在 host1 上执行:ssh -L 8888:host3:8000 host2表示绑定本地 8888 端口,该端口的访问流量会由 host2 转发至 host3:8000 端口。在 host1 上执行:1ssh -L 8888:localhost:8000 host2表示绑定本地 8888 端口,该端口的访问流量会转发至 host2:8000 端口。注意目标主机的 localhost 指的是目标主机本身。本地端口默认绑定到 localhost,只能本地访问,若要可以外网访问(绑定 0.0.0.0),可以写成:ssh -L :8888:host3:8000 host2远程端口转发SSH 绑定远程端口,将远程端口的访问转发到本地。使用 -R 参数,格式为 远程主机端口:目标主机:目标主机端口。SSH 远程端口转发非常适合用来做内网穿透。假如 host1 是公网主机,host2 是内网主机且能够访问公网,host3 是内网主机不能访问公网,但 host2 可以访问 host3。如果要从 host1 访问 host3,可以用 host2 中转。在 host2 上执行:ssh -R 8888:host3:8000 host1表示绑定 host1 的 8888 端口,该端口的访问流量会由 host2 转发至 host3:8000 端口。在 host2 上执行:ssh -R 8888:localhost:8000 host1表示绑定 host1 的 8888 端口,该端口的访问流量会转发至 host2:8000 端口,注意目标主机的 localhost 指的是本地主机(发起 SSH 连接的主机)。远程端口也是默认绑定到 localhost,若要外网访问(绑定 0.0.0.0),需要修改远程主机的 /etc/ssh/sshd_config 配置:GatewayPorts yes记得重启 sshd 服务:systemctl restart sshd动态端口转发上述两种端口转发都是固定端口对固定端口的转发。动态端口转发不必指定端口号,可以将本地任意端口的流量转发到 SSH 远端。动态端口转发使用 -D 参数,参数为 绑定地址:绑定本地端口。SSH 会启动一个 SOCKS 服务器监听该地址和端口,当使用该端口作为 SOCKS 代理时,请求的流量会被转发到远端。例如在 host1 上执行ssh -D 8000 host2则在 host1 的 Firefox 中指定 localhost:8000 作为 socks 代理时,可以直接访问 host2 能够访问的主机和端口。SSH 的其他参数-N 只连接远程主机,不打开远程 shell;-T 不为这个连接分配 TTY;这两个参数可以一起使用,代表这个 SSH 连接只用来传输数据,不执行远程操作。-f 表示 SSH 连接成功后,转入后台运行。autosshSSH 连接可能会意外断开或 hang 住,用进程监控工具,并不能有效检测到 hang 住的情况,autossh 就是为了解决这个问题。autossh 会启动一个 SSH 进程,并实现一个端口转发循环,当发现进程死掉或者端口转发循环的流量停止时,会重启 SSH 进程,有效避免了 hang 住导致 SSH 端口转发不可用的情况。安装:sudo apt install autosshautossh 命令的参数除了 -M 参数(用于手动指定端口转发循环的端口)外,其他参数与 ssh 命令相同,并会把这些参数传递给监视的 SSH 进程。所以一个稳定的 SSH 远程端口转发的命令可以是:sh -NT -R 8888:localhost:8000 host1可以将 autossh 与 supervisor 等进程管理工具配合使用,建立长期稳定的 SSH 端口转发。
2024年11月05日
93 阅读
0 评论
0 点赞
2024-11-04
Docker的三种代理设置方式
Docker的三种网络代理配置有时因为网络原因,比如公司NAT,或其它啥的,需要使用代理。 Docker的代理配置,略显复杂,因为有三种场景。 但基本原理都是一致的,都是利用Linux的http_proxy等环境变量。dockerd代理 在执行docker pull时,是由守护进程dockerd来执行。 因此,代理需要配在dockerd的环境中。 而这个环境,则是受systemd所管控,因此实际是systemd的配置。sudo mkdir -p /etc/systemd/system/docker.service.dsudo touch /etc/systemd/system/docker.service.d/proxy.conf在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:[Service]Environment="HTTP_PROXY=http://proxy.example.com:8080/"Environment="HTTPS_PROXY=http://proxy.example.com:8080/"Environment="NO_PROXY=localhost,127.0.0.1,.example.com"其中,proxy.example.com:8080要换成可用的免密代理。 通常使用cntlm在本机自建免密代理,去对接公司的代理。 可参考《Linux下安装配置Cntlm代理》。Container代理 ¶在容器运行阶段,如果需要代理上网,则需要配置~/.docker/config.json。 以下配置,只在Docker 17.07及以上版本生效。{ "proxies": { "default": { "httpProxy": "http://proxy.example.com:8080", "httpsProxy": "http://proxy.example.com:8080", "noProxy": "localhost,127.0.0.1,.example.com"} }}这个是用户级的配置,除了proxies,docker login等相关信息也会在其中。 而且还可以配置信息展示的格式、插件参数等。此外,容器的网络代理,也可以直接在其运行时通过-e注入http_proxy等环境变量。 这两种方法分别适合不同场景。 config.json非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。 在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用-e注入这种显式配置会更好,减轻对构建、部署环境的依赖。 当然,在这些环境中,最好用良好的设计避免配置代理上网。docker build代理 ¶虽然docker build的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。 在构建时,需要注入http_proxy等参数。docker build . \--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \ --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \ --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \ -t your/image:tag 注意:无论是docker run还是docker build,默认是网络隔绝的。 如果代理使用的是localhost:3128这类,则会无效。 这类仅限本地的代理,必须加上--network host才能正常使用。 而一般则需要配置代理的外部IP,而且代理本身要开启gateway模式。重启生效 ¶代理配置完成后,reboot重启当然可以生效,但不重启也行。docker build代理是在执行前设置的,所以修改后,下次执行立即生效。 Container代理的修改也是立即生效的,但是只针对以后启动的Container,对已经启动的Container无效。dockerd代理的修改比较特殊,它实际上是改systemd的配置,因此需要重载systemd并重启dockerd才能生效。sudo systemctl daemon-reloadsudo systemctl restart docker参考 https://note.qidong.name/2020/05/docker-proxy/
2024年11月04日
12 阅读
0 评论
0 点赞
2024-11-04
Nginx转发设置模板
#80 server { listen 80; # server_name your_domain.com; # 替换为你的域名或 IP 地址 return 301 https://$host$request_uri; location / { proxy_pass http://localhost:10; # 转发到 18000 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } #443 server { listen 443 ssl; # server_name your_domain.com; # 替换为你的域名或 IP 地址 ssl_certificate /path/to/your/certificate.crt; # 替换为你的 SSL 证书路径 ssl_certificate_key /path/to/your/private.key; # 替换为你的 SSL 私钥路径 location / { proxy_pass https://localhost:14; # 转发到 14430 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2024年11月04日
8 阅读
0 评论
0 点赞
2024-11-04
SSH密钥一站式解决
ssh-keygen ssh-copy-id -i key_file user@host
2024年11月04日
10 阅读
0 评论
0 点赞
2024-11-04
艰难的Nextcloud AIO安装过程
遇到的两大难题反向代理Nextcloud配置Docker被墙反向代理买了个无限流量的服务器,然后使用autossh端口映射的方式映射到本地。 操作步骤及遇到的问题:设置ssh密钥本地主机安装LNMP建立ssh端口映射 出现问题:ssh端口映射后本地主机和服务器访问127.0.0.1可以显示nginx欢迎界面,访问服务器IP和域名都不可以。 首先判断是防火墙的问题,检查wsl防火墙并关闭win防火墙故障依旧。于是通过在服务器上也安装Nginx做反向代理的方式解决。设置SSL证书,使用DNS验证方式,同一个域名可以在不同机器上申请证书。连接NextcloudNextcloud配置查找Nextcloud文档把参数搞明白按照文档上通过反向代理的启动参数结合个人需求修改把文档上Nginx配置应用到本地主机上首先安装AIO,这时遇到了Docker被墙的问题nginx连接到AIO需要使用http而不是https因为AIO没有配置证书AIO内初次启动容器会失败,关闭后重新启动即可。Docker被墙核心:由于AIO会自行拉取Docker,所以常规方法行不通。尝试了四种方法:在win开启v2ray对wsl终端进行代理,可以进入AIO,但是AIO拉取其他容器失败在win开启Proxifier,同上。使用docker镜像站,同上在AIO docker中加入代理参数,成功以下附上部分配置sudo docker run \ --init \ --sig-proxy=false \ --name nextcloud-aio-mastercontainer \ --restart always \ --publish 8080:8080 \ --env APACHE_PORT=100 \ --env APACHE_IP_BINDING=0.0.0.0 \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ --env NEXTCLOUD_DATADIR="/mnt/d/AIO" \ --env http_proxy="http://ip:port" \ --env https_proxy="http://ip:port" \ --env NEXTCLOUD_UPLOAD_LIMIT=100G \ --env NEXTCLOUD_MAX_TIME=360000 \ --env NEXTCLOUD_MEMORY_LIMIT=1024M \ --env SKIP_DOMAIN_VALIDATION=true \ nextcloud/all-in-one:latestDockerd 代理 在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。 代码语言:javascript 复制 sudo mkdir -p /etc/systemd/system/docker.service.d sudo touch /etc/systemd/system/docker.service.d/proxy.conf 在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容: 代码语言:javascript 复制 [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" Environment="NO_PROXY=localhost,127.0.0.1,.example.com" 其中,proxy.example.com:8080 要换成可用的免密代理。通常使用 cntlm 在本机自建免密代理,去对接公司的代理。可参考《Linux下安装配置Cntlm 代理》。
2024年11月04日
8 阅读
0 评论
0 点赞
1
2
...
14