GSSAPI(Generic Security Service API)란 인증 API를 말한다.
pip install "paramiko[gssapi]"
파이썬 ssh 라이브러리인 paramiko에서 GSS-API/Kerberos 등등의 기능을 사용하려면, extra flavor로 설치해야 한다. gss-api와 유사한 Microsoft의 SSPI도 지원한다고 하는데, 써보진 않았다.
(참고: https://www.paramiko.org/installing.html?highlight=gssapi#the-gssapi-extra-install-flavor)
import paramiko
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
hostname="my.server.com",
username="myusername",
gss_auth=True,
# gss_kex=True,
# gss_deleg_creds=True,
)
stdin_, stdout_, stderr_ = client.exec_command("ls -al")
print(stdout_.read().decode("utf-8"))
client.close() # dangling when exception
except paramiko.ssh_exception.AuthenticationException as e:
print(e)
사용법은 위와 같다. gss 옵션이 여러가지 있는데 필요한 경우 Client api 문서를 확인한다.
paramiko의 주의점은 close를 잘 해줘야 한다는건데, paramiko가 with~ as~문을 지원하지 않아서 예외처리가 잘 되어 있지 않으면 close가 안될 수 있다. (위 코드도 마찬가지다)
아래처럼 래퍼 클래스를 만드는게 현재로선 차선책이다
import paramiko
class Client(paramiko.SSHClient):
def __init__(self, host, username, password=None):
super().__init__()
self.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.host = host
self.username = username
self.password = password
def __enter__(self):
self.close()
self.connect(
self.host,
username=self.username,
password=self.password,
timeout=5
)
return self
def __exit__(self, type, value, traceback):
self.close()
with MyClient("host", "username") as client:
stdin, stdout, stderr = client.exec_command("ls")
print(stdout.read().decode())
(참고: https://github.com/paramiko/paramiko/issues/1298#issuecomment-538553477)
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] celery + redis lock (0) | 2022.09.08 |
---|---|
[Jupyter Notebook] 줄바꿈(word wrap, 워드랩) 적용하는 법 (0) | 2022.08.08 |
[conda] base environment activate 기본동작 막기 (0) | 2022.08.05 |
[Jupyter Notebook] 탭 없이 자동완성 하는법 (jupyter_contrib_nbextensions) (0) | 2022.08.05 |
[Python] m1 mac에서 homebrew로 conda 설치 및 jupyter 세팅 (0) | 2022.08.04 |