우리 대학의 서버에서 몇 가지 테스트를 실행해야 합니다. 사무실에 있는 데스크톱에서 SSH를 통해 서버에 액세스할 수 있습니다. 주말 동안 여러 테스트를 실행할 서버에서 Python 스크립트를 시작하고 싶습니다.
주말에는 사무실 데스크톱이 대기 상태가 되기 때문에 SSH 세션이 종료되더라도 해당 프로세스는 서버에서 계속 실행되어야 합니다.
나는 다음 질문에 명시된 대로 nohup
및 을(를 screen
) 이해합니다.tmux
내가 지금 하고 있는 일은:
ssh username@server
tmux
python3 run_my_tests.py
-> 이 스크립트는 일련의subprocess.check_output
다른 스크립트를 실행하며 자체적으로 일부 Java 프로세스를 시작합니다.- 테스트가 잘 진행됩니다.
- Ctrl+B, D를 사용하고 세션을 분리합니다.
- 이렇게 하면
tmux attach
tmux 세션이 다시 복구됩니다.아직까지 오류 없이 잘 돌아가고 있습니다. 몇 분 동안 계속 확인했는데 테스트가 잘 진행되고 있었습니다. - SSH 세션을 닫습니다
그런 다음 SSH를 통해 서버에 로그인하면하다실행 중인 세션에 다시 연결할 수 있었고 tmux
,하지만내가 보는 것은 이것이다:
Traceback (most recent call last):
File "run_my_examples.py", line 70, in <module>
File "run_my_examples.py", line 62, in run_cmd_aggr
File "run_my_examples.py", line 41, in run_cmd
File "/usr/lib64/python3.4/subprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib64/python3.4/subprocess.py", line 858, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.4/subprocess.py", line 1456, in _execute_child
raise child_exception_type(errno_num, err_msg)
PermissionError: [Errno 13] Permission denied
즉, 내가 실행 중인 테스트를 생성하는 프로세스,SSH 세션 종료 직후, 다른 하위 프로세스를 생성할 수 없습니다. chmod
관련된 모든 파일에 대한 권한을 편집했는데 아무것도 변경되지 않았습니다 .
서버는 로그인/권한에 Kerberos를 사용하고 서버는 Scientific Linux 7.2라고 생각합니다.
SSH 세션에서 로그아웃할 때 새 프로세스를 생성하는 권한을 제거할 수 있습니까? 내가 할 수 있는게 있습니까? 난 시작해야 해일부테스트 중, 얼마나 많은 시간과 공간이 소요될지 잘 모르겠습니다...
- 버전
systemd
은 219입니다. - 파일 시스템은 AFS이며 이를 사용하여
fs listacl <name>
스크립트에서 사용하는 디렉터리/파일에 대한 권한이 있는지 확인할 수 있습니다.
답변1
감사해요마크 플롯닉나는 문제를 파악하고 해결할 수 있다.
문제는 두 사람의 상호작용이다.AFS 파일 시스템인증을 처리하는 서버와 Kerberos에서 사용됩니다. 같은 문제가 있습니다SO에 대한 이 질문.
기본적으로 서버에 ssh를 연결하면 Kerberos가 세션에 인증 토큰을 제공합니다. 이 토큰은 AFS 파일 시스템에 액세스하는 데에도 사용됩니다. SSH 세션이 닫히면 이 토큰이 삭제되고 실행 중인 프로세스가 AFS의 파일에 액세스하려고 할 때 권한 거부 오류가 발생하기 시작합니다.
이 문제에 대한 해결책은 screen
/ 내에서 새 창을 시작 tmux
하고 다음 명령을 실행하는 것입니다.
kinit && aklog
screen
그런 다음 /에서 분리 tmux
하고 SSH 세션을 안전하게 닫을 수 있습니다 .
위 명령은 새로운 Kerberos 토큰을 생성하고 이를 screen
/ tmux
세션과 연결하므로 ssh 연결이 닫히면 초기 토큰이 취소되지만 이제 생성된 토큰을 하위 프로세스가 사용하므로 권한이 거부되지 않습니다. 오류.
결론적으로:
ssh username@server
tmux
- 계속 실행하는 데 필요한 프로세스를 시작하세요.
- 새 창 만들기Ctrl+B, C
kinit && aklog
- 세션에서 분리Ctrl+B, D
- SSH 세션 닫기
답변2
이러한 오류는 파일 시스템 권한과 관련이 있을 수 있습니다. 서버 측 syslog 이벤트를 살펴볼 수 있나요?
어쩌면 귀하의 환경에 로그인 상태를 유지하고 살펴봐야 할 수도 있습니다.여기Linux 파일 권한 및 문제에 대해 자세히 알아보는 것이 도움이 될 수 있습니다.
답변3
screen ssh $USER@$HOSTNAME
서버에서 사용해 보세요 .
그 kinit && aklog
솔루션은 나에게 효과가 없었지만 이 "sshception" 솔루션을 찾았습니다. 화면에서는 SSH를 통해 동일한 시스템에 연결하고 해당 SSH 세션에서 프로그램을 실행합니다. 화면에서 권한이 손실되더라도 내부 SSH 세션은 계속 열려 있고 인증됩니다.