SSH 세션에서 로그아웃할 때 권한 거부 오류가 발생하는 이유는 무엇입니까?

SSH 세션에서 로그아웃할 때 권한 거부 오류가 발생하는 이유는 무엇입니까?

우리 대학의 서버에서 몇 가지 테스트를 실행해야 합니다. 사무실에 있는 데스크톱에서 SSH를 통해 서버에 액세스할 수 있습니다. 주말 동안 여러 테스트를 실행할 서버에서 Python 스크립트를 시작하고 싶습니다.

주말에는 사무실 데스크톱이 대기 상태가 되기 때문에 SSH 세션이 종료되더라도 해당 프로세스는 서버에서 계속 실행되어야 합니다.

나는 다음 질문에 명시된 대로 nohup및 을(를 screen) 이해합니다.tmux

내가 지금 하고 있는 일은:

  • ssh username@server
  • tmux
  • python3 run_my_tests.py -> 이 스크립트는 일련의 subprocess.check_output다른 스크립트를 실행하며 자체적으로 일부 Java 프로세스를 시작합니다.
  • 테스트가 잘 진행됩니다.
  • Ctrl+B, D를 사용하고 세션을 분리합니다.
  • 이렇게 하면 tmux attachtmux 세션이 다시 복구됩니다.아직까지 오류 없이 잘 돌아가고 있습니다. 몇 분 동안 계속 확인했는데 테스트가 잘 진행되고 있었습니다.
  • 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 세션은 계속 열려 있고 인증됩니다.

관련 정보