Microsoft MVP성태의 닷넷 이야기
오류 유형: 550. scp - sudo: no tty present and no askpass program specified [링크 복사], [링크+제목 복사],
조회: 21620
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 2개 있습니다.)
.NET Framework: 812. pscp.exe 기능을 C#으로 제어하는 방법
; https://www.sysnet.pe.kr/2/0/11849

오류 유형: 550. scp - sudo: no tty present and no askpass program specified
; https://www.sysnet.pe.kr/2/0/11954




scp - sudo: no tty present and no askpass program specified

예전에 만들어 둔 scp 제어 프로그램을 보면,

pscp.exe 기능을 C#으로 제어하는 방법
; https://www.sysnet.pe.kr/2/0/11849

session.ExecuteCommand라는 기능을 통해 원격지 리눅스 머신에 명령어를 수행하는 것이 가능합니다. 그런데 간혹 sudo 권한으로 명령을 실행하고 싶을 수가 있는데, 그럴 때 해당 프로그램을 다음과 같은 식으로 실행하면,

string cmd = "sudo /usr/bin/dotnet";

session.ExecuteCommand(cmd);

원격지에서는 암호를 다시 입력받는 과정을 거치느라 잠시 후 오류가 발생합니다.

sudo: no tty present and no askpass program specified
Error: WinSCP.SessionRemoteException: Command 'sudo /usr/bin/dotnet'
failed with return code 1 and error message
sudo: no tty present and no askpass program specified.
   at WinSCP.OperationResultBase.Check()
   at Example.DoRunCommand(Session session, CommandArg arg, String password) in D:\dpapiscp\Program.cs:line 96
   at Example.Main(String[] args) in D:\dpapiscp\Program.cs:line 64

따라서 이 암호를 입력받는 것을 자동화해야 하는데요. 이를 위해 sudo 명령의 -S 옵션을 이용하면 됩니다. 그래서 다음과 같이 입력을 redirection 받을 수 있습니다.

string cmd = "echo pwct | sudo -S /usr/bin/dotnet"; // 암호가 pwct라고 가정

session.ExecuteCommand(cmd);




참고로, 원격에서 수행할 명령을 cmd.exe 창의 명령행을 통해 다음과 같이 전달하고 싶을 수 있습니다.

C:\temp> dpapiscp.exe echo pwct | sudo -S /usr/bin/dotnet

그런데, 위와 같이 입력하면 "|" 기호도 윈도우 shell은 파이프라인 기호로 인식하기 때문에 sudo를 명령어로 해석하게 되어 다음과 같은 오류가 발생합니다.

'sudo' is not recognized as an internal or external command, operable program or batch file.

따라서 이런 경우에는 인용 마크를 함께 써서 해결해야 합니다.

C:\temp> dpapiscp.exe "echo pwct | sudo -S /usr/bin/dotnet"




(2025-08-06 업데이트) 명령행에 '&' 기호를 추가했더니,

C:\temp> dpapiscp.exe "dotnet /app/corecorelin/publish/CoreCoreLin.dll &"

이런 오류가 발생합니다.

-bash: line 7: syntax error near unexpected token `;'
-bash: line 7: `dotnet /app/corecorelin/publish/CoreCoreLin.dll &  ; echo "WinSCP: this is end-of-file:$?"'
Error: WinSCP.SessionRemoteException: Connection has been unexpectedly closed. Server sent command exit status 2.
   at WinSCP.OperationResultBase.Check()
   at Example.DoRunCommand(Session session, CommandArg arg, String password)
   at Example.Main(String[] args)

아마도 winscp 내부에서 '&' 기호를 특수하게 사용하는 것 같은데... 어쩔 수 없습니다. 일단 저런 경우에는 coproc 명령으로 대체했습니다.

C:\temp> dpapiscp.exe "coproc dotnet /app/corecorelin/publish/CoreCoreLin.dll"




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/6/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 106  107  108  109  110  111  112  113  114  115  116  117  118  [119]  120  ...
NoWriterDateCnt.TitleFile(s)
11041정성태9/10/201623573.NET Framework: 605. CLR4 보안 - yield 구문 내에서 SecurityCritical 메서드 사용 불가 - 2번째 이야기
11040정성태9/10/201631227.NET Framework: 604. C# Windows Forms - Drag & Drop 예제 코드 [2]파일 다운로드1
11039정성태9/9/201625711오류 유형: 355. Visual Studio 빌드 오류 - error CS0122: '__ComObject' is inaccessible due to its protection level
11038정성태9/9/201629512VC++: 99. 서로 다른 프로세스에서 WM_DROPFILES 메시지를 전송하는 방법파일 다운로드1
11037정성태9/8/201632728.NET Framework: 603. socket - shutdown 호출이 필요한 사례파일 다운로드1
11036정성태8/29/201627783개발 환경 구성: 297. 소스 코드가 없는 닷넷 어셈블리를 디버깅할 때 지역 변숫값을 확인하는 방법
11035정성태8/29/201623628오류 유형: 354. .NET Reflector - PDB 생성 화면에서 "Clear Store"를 하면 "Index and length must refer to a location within the string" 예외 발생
11034정성태8/25/201627643개발 환경 구성: 296. .NET Core 프로젝트를 NuGet Gallery에 배포하는 방법 [2]
11033정성태8/24/201625776오류 유형: 353. coreclr 빌드 시 error C3249: illegal statement or sub-expression for 'constexpr' function
11032정성태8/23/201624959개발 환경 구성: 295. 최신의 Visual C++ 컴파일러 도구를 사용하는 방법 [1]
11031정성태8/23/201620642오류 유형: 352. Error encountered while pushing to the remote repository: Response status code does not indicate success: 403 (Forbidden).
11030정성태8/23/201624764VS.NET IDE: 111. Team Explorer - 추가한 Git Remote 저장소가 Branch에 보이지 않는 경우
11029정성태8/18/201632425.NET Framework: 602. Process.Start의 cmd.exe에서 stdin만 redirect 하는 방법 [1]파일 다운로드1
11028정성태8/15/201624105오류 유형: 351. Octave 설치 시 JRE 경로 문제
11027정성태8/15/201626627.NET Framework: 601. ElementHost 컨트롤의 메모리 누수 현상
11026정성태8/13/201627808Math: 19. 행렬 연산으로 본 해밍코드
11025정성태8/12/201627403개발 환경 구성: 294. .NET Core 프로젝트에서 "Copy to Output Directory" 처리 [1]
11024정성태8/12/201625797오류 유형: 350. "nProtect GameMon" 실행 중에는 Visual Studio 디버깅이 안됩니다! [1]
11023정성태8/10/201627490개발 환경 구성: 293. Azure 구독 후 PaaS 서비스 만들어 보기
11022정성태8/10/201627937개발 환경 구성: 292. Azure Cloud Service 배포시 사용자 정의 작업을 추가하는 방법
11021정성태8/10/201625299오류 유형: 349. System.Runtime.Remoting.RemotingException - Type '..., ..., Version=..., Culture=neutral, PublicKeyToken=null' is not registered for activation [2]
11020정성태8/10/201628296VC++: 98. 원본과 대상 버퍼가 같은 경우 memcpy, wmemcpy 주의점
11019정성태8/10/201645157기타: 60. 도서: 시작하세요! C# 6.0 프로그래밍: 기본 문법부터 실전 예제까지 (2쇄 정오표)
11018정성태8/9/201628949.NET Framework: 600. 단일 메서드 내에서의 할당으로 알아보는 자바와 닷넷의 GC 차이점 [1]
11017정성태8/9/201629668웹: 33. HTTP 쿠키에 한글 값을 설정하는 방법
11016정성태8/7/201628074개발 환경 구성: 291. Windows Server Containers 소개
... 106  107  108  109  110  111  112  113  114  115  116  117  118  [119]  120  ...