SSH làm cho tất cả các mật khẩu đã nhập hiển thị khi lệnh được cung cấp làm đối số cho lệnh SSH


45

Nếu tôi chạy cái này:

ssh user@server 'mysql -u user -p'

Khi nó hỏi tôi mật khẩu MySQL và tôi bắt đầu nhập, mật khẩu sẽ hiển thị trên màn hình. Làm thế nào tôi có thể ngăn chặn điều này? Nếu tôi đăng nhập thông qua sshvà sau đó thực thi lệnh MySQL, mọi thứ đều hoạt động tốt.


5
bạn không nghĩ rằng tiêu đề khá rõ ràng .. Bạn có thể nói nó làm cho tất cả văn bản bao gồm cả mật khẩu hiển thị. Và làm thế nào ssh có nghĩa là để biết những gì bạn đang nhập là mật khẩu so với một số lệnh hoặc dữ liệu khác?
barlop

@barlop Tôi đang mở để đề xuất.
110971

@barlop cũng hoạt động khi bạn thực thi lệnh một khi bạn ssh đến máy chủ. Tôi đang tìm cách nào đó để làm cho hành vi ssh giống nhau khi các lệnh được cung cấp làm đối số.
110971

nó có thể không cần thiết, nhưng bạn có thể bao gồm một ví dụ sao chép / dán đầy đủ từ bàn điều khiển, ví dụ như không chỉ hiển thị lệnh ssh mà còn là phản hồi và lời nhắc mysql theo sau. Bạn có thể thay đổi mật khẩu thành swisscheese để không đưa nó vào trang web Tôi không thể kiểm tra nó vào lúc này
barlop

@barlop Đó chỉ là những tin nhắn giống như bạn mong đợi, ví dụ mật khẩu ssh theo sau là lời nhắc mật khẩu MySQL
user110971

Câu trả lời:


100

Nếu bạn cung cấp một lệnh từ xa để chạy, SSH sẽ không cấp phát một tty, vì vậy lệnh từ xa không thể tắt tiếng vang. Bạn có thể buộc SSH cung cấp tty bằng -ttùy chọn:

ssh -t user@server 'mysql -u user -p'

Tùy chọn tương đương (cho -ohoặc cho tập tin cấu hình) là RequestTTY. Tôi thận trọng không sử dụng nó trong cấu hình vì nó có thể có tác dụng không mong muốn đối với các lệnh không tương tác .


15
Hoặc bạn có thể chỉnh sửa ~ / .ssh / config để định cấu hình máy chủ cụ thể đó để luôn yêu cầu TTY. Xem RequestTTYtrong man 5 ssh_config.
một CVn

7
@ MichaelKjorling (và Toby): có thể thêm một chút cảnh báo rằng việc thêm "-t" chỉ được dành riêng cho việc sử dụng tương tác, vì nó có tác dụng phụ. Để có cái nhìn tốt về một số tác dụng phụ đó: unix.stackexchange.com/a/122624/27616 (từ StephaneChazelas)
Olivier Dulac

Đồng ý - Tôi sẽ đề nghị rằng thật xấu hổ khi bạn không thể thêm cài đặt (chẳng hạn như điều này) theo lệnh từ xa (chứ không phải bằng Máy chủ).
Toby Speight

28

Lưu trữ mật khẩu trong một tệp tùy chọn được bảo vệ

Nếu bạn có thể tin tưởng [*] bảo mật của máy tính từ xa, bạn có thể lưu mật khẩu vào tệp tùy chọn được bảo vệ đúng cách, như được đề xuất trong chương Hướng dẫn người dùng cuối về bảo mật mật khẩu của hướng dẫn, mà không cần phải liên lạc qua sshhoặc nhập từng loại thời gian.

Cụ thể, bạn có thể thêm một dòng trong phần [client] của tệp .my.cnftrong thư mục chính của bạn:

[client]
password=your_pass

Tất nhiên, bạn phải giữ cho tệp đó không thể truy cập được cho bất kỳ ai trừ chính bạn, bằng cách đặt chế độ truy cập tệp thành 400 hoặc 600 với, ví dụ:

chmod 600 ~/.my.cnf

Sau đó, bạn có thể sử dụng một cái gì đó như

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

nơi user110971là tên người dùng của tài khoản của bạn.


Buộc ssh phân bổ giả tty ( ssh -t)

Vấn đề này xảy ra mỗi khi bạn gửi lệnh thông qua sshvà bạn cần chèn đầu vào vì theo mặc định, sshsẽ không cấp phát giả.

Bạn có thể buộc phân bổ tty với tùy chọn -t, (thậm chí nhiều hơn một nếu cần):

-t

Buộc phân bổ giả. Điều này có thể được sử dụng để thực thi các chương trình dựa trên màn hình tùy ý trên một máy từ xa, có thể rất hữu ích, ví dụ như khi triển khai các dịch vụ menu. Nhiều -ttùy chọn buộc phân bổ tty, ngay cả khi ssh không có tty cục bộ.

Như bạn có thể đọc trong bài này Debian (Jul_11_2008) về sudo, nó là một vấn đề cũ mà tình yêu để tái diễn:

ssh user@server "sudo ls"  
password: password  

Và mật khẩu được hiển thị cho bạn

Giải pháp là buộc ssh phân bổ giả, với cờ -t:

ssh -t user@server sudo ls

Ghi chú:

[*] Nếu bạn có thể dựa vào việc để lại mật khẩu trong một tệp mà bạn chỉ có thể truy cập và root trênmáy khách đang làm việc .
Nếu có thể khởi động lại máy tính từ xa thay đổi HĐH hoặc xóa ổ cứng, máy tính không thể được coi là hoàn toàn an toàn ... nhưng trong trường hợp đó, cơ sở dữ liệu sẽ không được bảo mật.


1
có thể thêm một chút cảnh báo rằng chỉ thêm "-t" cho việc sử dụng tương tác, vì nó có tác dụng phụ. Để có cái nhìn tốt về một số tác dụng phụ: unix.stackexchange.com/a/122624/27616 (từ StephaneChazelas)
Olivier Dulac

3

Tùy chọn gắn kết "hidepid" cho Proc fs cũng có giá trị. Nó làm cho dòng lệnh của bạn vô hình trong danh sách quy trình cho người dùng khác. ví dụ fstab:

proc /proc proc hidepid=1 0 0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.