Khi bạn đang ssh-ing vào hoặc đi qua php phiên của bạn không được phân bổ một pty. Tôi đã sử dụng mỗi người trong số các giải pháp sau:
ĐÁP 1: sử dụng ssh -t hoặc ssh -tT để pty phân bổ khi đăng nhập bằng ssh:
tôi đã rất vui vẻ nhận lệnh để chạy ngay do để ptys khi chạy phiên như thế này: jenkins shell -> ssh driver -> ssh test -> docker exec. Câu trả lời hay tại đây: https://unix.stackexchange.com/questions/105422/command-must-be-run-from-a-terminal
"Hãy thử tùy chọn -t để ssh. Nếu điều đó không hoạt động, hãy thử -tt".
"-t Phân bổ giả-tty.Điều này có thể được sử dụng để thực hiện các chương trình dựa trên màn hình tùy ý trên máy từ xa, có thể rất hữu ích, ví dụ: khi thực hiện các dịch vụ menu. nếu ssh không có tty cục bộ. "
ĐÁP 2: sử dụng Docker chạy -t ... và Docker exec -Nó
Sử dụng -t và các tùy chọn -nó phân bổ pty trong phiên Docker exec của bạn.
Cũng với docker exec, bạn có thể chỉ cần sử dụng tùy chọn -u để đăng nhập vào vùng chứa với tư cách người dùng khác nhau và tránh sử dụng su. ví dụ.
$ docker exec -u root -it small_hypatia bash
Có một câu hỏi và câu trả lời về vấn đề này ở đây: https://github.com/docker/docker/issues/8631
ĐÁP 3: sử dụng python để đẻ trứng một pty trong shell của bạn
Khá một hack dễ thương :)
[email protected]:~$ su -
su: must be run from a terminal
$ echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py
$ python /tmp/asdf.py
$ su -
Password:
[email protected]:~#
Tôi muốn biết thêm về trường hợp/thiết lập sử dụng của bạn. Chạy SSH trong vùng chứa là một mẫu chống. Bạn có cần phải thay đổi người dùng khi đang di chuyển (trong khi bạn đang ở trong thùng chứa không?) Hoặc là một phần của quá trình xây dựng (bằng cách sử dụng một Dockerfile?). – johnharris85
Nếu bạn Google thông báo lỗi này, có một số giải pháp. –
Cảm ơn bạn sự trợ giúp thực sự tràn ngập sẽ được đánh giá cao. Tôi đã tìm thấy một workaround chạy python nhưng sẽ cần một giải pháp phù hợp. – SaintHUN