Hai máy tính:
- Máy tính để bàn-Ubuntu; Đã sửa lỗi IP cục bộ, được kết nối với modem có cổng 22 mở và chuyển tiếp tới nó. Vì IP động tôi có tài khoản no-ip. Vì vậy, domain-Desktop-Ubfox.com chuyển tiếp các yêu cầu đến máy tính này.
- Remote Raspberry Pi 3 được kết nối với mạng di động có tất cả các yêu cầu đến được đóng bởi ISP.
Tôi cần quyền truy cập SSH từ Desktop-Ubuntu đến RPi. Bởi vì không thể trực tiếp tôi xây dựng một đường hầm. Sau khi sắp xếp hoặc cố gắng để nó hoạt động liên tục ( autossh
ví dụ), đây là lược đồ của tôi:
Tại RPi :
sshd_config
:
ClientAliveInterval 120
ClientAliveCountMax 720
Crontab cứ sau 5 phút để kiểm tra xem ssh
ID tiến trình có phải là null không.
screen
được sử dụng để giữ ssh
đầu ra là một cửa sổ shell riêng biệt.
*/5 * * * * /bin/sh /path-to/check-ssh-tunnel.sh
check-ssh-tunnel.sh
:
COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g"
COMMAND_SSH="/usr/bin/ssh -R 2255:localhost:22 domain-Desktop-Ubuntu.com -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
$COMMAND
fi
Đây là liên quan ps aux | grep ssh
Tôi nhận được 3 giờ sau khi khởi động lại:
pi 2128 0.0 0.2 5396 2252 ? Ss 08:25 0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g
pi 2130 0.0 0.5 9132 4748 pts/0 Ss+ **08:25** 0:00 /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g
Nếu tôi kill 2128
cron hoạt động và:
pi 4755 0.0 0.2 5396 2092 ? Ss 11:25 0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g
pi 4756 0.0 0.5 9132 4840 pts/0 Ss+ **11:25** 0:00 /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g
Để truy cập RPi từ Desktop-Ubuntu :
ssh -p 2255 pi@localhost
Vấn đề của tôi là kết nối này hoạt động ngẫu nhiên:
- đôi khi nó yêu cầu mật khẩu và tôi được kết nối
- đôi khi
ssh: connect to host localhost port 2255: Connection refused
- đôi khi phải mất một thời gian dài để cuối cùng xuất ra
ssh_exchange_identification: read: Connection reset by peer
Sau khi thử lại :Connection refused
.
Quay lại RPi dường như không có gì thay đổi:
$ screen -r # to get the ssh window
user@domain-Desktop-Ubuntu.com~$ ssh -p 2255 pi@localhost
ssh: connect to host localhost port 2255: Connection refused
Tại thời điểm này và cho tất cả các bài kiểm tra đó, tôi đang quản lý RPi từ xa bằng cách sử dụng Teamviewer. Vì một số lý do tôi không muốn sử dụng nó trong tương lai trừ khi nó thực sự cần thiết. Đó là lý do tại sao tôi cần một đường hầm SSH.
Chuyện gì thế? Làm thế nào để làm cho đường hầm làm việc đáng tin cậy?
ServerAliveInterval
và ServerAliveCountMax
(đây là cho ssh
, không phải cho sshd
).
ExitOnForwardFailure=yes
là chìa khóa
ClientAliveInterval
vv các vấn đề trên máy chủ. RPi của bạn là một khách hàng khi nó cố gắng thiết lập đường hầm. Các giá trị rất cao cho mục đích này, tôi nghĩ vậy. Kiểm tra câu hỏi này . Kết nối cố gắng thiết lập đường hầm sẽ thất bại nếu chuyển tiếp cổng không thành công. Kiểm tra câu hỏi này và sử dụngExitOnForwardFailure=yes
. Nếu hai liên kết của tôi có ích, xin vui lòng nêu câu trả lời của tôi ở đó và viết câu trả lời của riêng bạn ở đây (có thể có liên kết). Nếu họ không giúp đỡ, hãy đưa ra một số phản hồi.