tệp chấm không có nguồn gốc khi chạy lệnh qua ssh


11

Khi tôi chạy chương trình của mình một cách tương tác, nó hoạt động tốt:

ssh somehost
$ ~/some/path/somescript.py

Khi tôi chạy chương trình của mình qua ssh trực tiếp, nó không hoạt động. Biến PYTHONPATHkhông được đặt, vì .bashrckhông có nguồn gốc.

ssh somehost ~/some/path/somescript.py

Nếu tôi chạy ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py', nó hoạt động tốt.

Nhưng cái sau sẽ không hiệu quả với một số người khác, ví dụ như sử dụng tcsh và hoàn toàn không có ~/.bashrc).

Là những gì các lệnh để chạy một điều qua ssh trên máy chủ khác mà làm việc cho tất cả vỏ?


1
Đã trả lời ở đây, stackoverflow.com/questions/820517/bashrc-at-ssh-login , về cơ bản, ssh không có nguồn .bashrc, bạn cần tìm nguồn .bashrc của mình thông qua .bash_profile hoặc các tùy chọn khác.
EightBitTony

1
@EightBitTony: Không, đó là một vấn đề khác. Câu hỏi của bzdjlyn là về một phiên không tương tác.
Gilles 'SO- ngừng trở nên xấu xa'

Trên thực tế, câu trả lời cuối cùng trong liên kết tôi đã đăng dường như có giá trị, ssh có nguồn .bashrc, nhưng nó không thực thi do kiểm tra tính tương tác. Tôi đánh giá cao tuy nhiên, câu trả lời của bạn bao gồm tất cả các cơ sở.
EightBitTony

3
@EightBitTony: Về câu hỏi đó, câu trả lời được chấp nhận là một giải pháp tốt cho người hỏi nhưng câu trả lời không nói lên toàn bộ câu chuyện. Bản thân SSH không có nguồn gì cả. Nếu shell đăng nhập của bạn được gọi là bash bash, thì nó sẽ lấy nguồn .bash_profilehoặc .profileđể đăng nhập tương tác và .bashrccho đăng nhập không tương tác. Nếu shell đăng nhập của bạn được bash gọi là as shhoặc ash hoặc ksh, nó sẽ .profiletạo ra một thông tin đăng nhập tương tác và không có gì cho đăng nhập không tương tác.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


12

Không có tệp cho mỗi người dùng chuẩn được chạy cho các lần đăng nhập không tương tác. Bạn cần phải làm cho chương trình trở nên khép kín, để nó có thể tìm thấy các phụ thuộc của nó mà không cần dựa vào các biến môi trường không mặc định, hoặc nếu không thì đặt môi trường một cách rõ ràng, điển hình là với

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

Bạn không nên đặt các biến môi trường trong .bashrc: tệp này có nghĩa là cho các vỏ tương tác và được đọc trong mỗi phiên bản của bash. Các biến môi trường nên được đặt .profile, được đọc khi bạn đăng nhập. Ngoài số lượng rất ít người không sử dụng shell kiểu Bourne làm vỏ đăng nhập của họ, .profilesẽ hoạt động cho mọi người, cho dù họ sử dụng bash hay zsh hay csh hoặc cá tương tác. Xem thêm Sự khác biệt giữa .bashrc và .bash_profile , Tập tin thiết lập nào sẽ được sử dụng để thiết lập các biến môi trường với bash?.

Điều đó đang được nói, có một cách để lấy một tập lệnh mỗi khi bạn đăng nhập qua ssh bằng một khóa cụ thể. Xem Có cách nào để đẩy thông tin cấu hình shell khi SSH đến máy chủ không? , sh tập tin khởi động qua ssh .


Bây giờ làm thế nào để tôi đánh dấu nó "trả lời"? :-)
bzdjlyn

Dọc phía bên trái của phần câu trả lời này nên có mũi tên lên xuống và bộ đếm phiếu. Ngay bên dưới nên có phác thảo của một hộp kiểm. Bạn có thể nhấp vào đó để kích hoạt chức năng chấp nhận câu trả lời.
Caleb

Cảm ơn tất cả các bạn một lần nữa, nhưng dường như câu trả lời của bạn không giải quyết được vấn đề của tôi.
bzdjlyn

Đây là một công thức mới hơn một chút về vấn đề và sự hiểu biết hiện tại của tôi về gốc rễ của nó.
bzdjlyn

Có vẻ như tôi không thể thêm hơn 60 ký tự ở đây vì vậy tôi phải hỏi riêng câu hỏi của mình một lần nữa. Xin lỗi ab. cái đó. Một lần nữa, điều này không được giải quyết, và đào nhiều hơn trong một vài ngày không giúp được gì.
bzdjlyn

0

Tôi đã có cùng một vấn đề, nhưng đối với tôi giải pháp là khác nhau. Người dùng của tôi không được cấu hình để sử dụng bash làm shell, thay vào đó, họ sử dụng zsh làm shell, do đó các tệp bash dot không chạy khi đăng nhập. Mở / etc / passwd bằng trình soạn thảo văn bản và tìm tên người dùng của bạn và nó sử dụng shell nào:

root:x:0:0:root:/root:/bin/zsh

Đây là cách người dùng của tôi trông. Lưu ý rằng nó nói / bin / zsh thay vì / bin / bash. Đối với zsh, tệp chấm chính xác là ~ / .zprofile. Nội dung của nó sẽ được chạy mỗi khi bạn đăng nhập bằng ssh.

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.