[SHELL] [Linux] 계정과 패스워드로 로그인 가능 여부 확인 방법

ssoobebe의 이미지

터미널 창에서 계정 이름과 패스워드로 로그인 가능한지 알고 싶습니다.

쉘 스크립트에 넣을 내용이라, login 명령어는 사용할 수가 없습니다.
(login 명령어 같은 경우, 패스워드를 따로 입력하라고 해서 사용할 수가 없습니다.)

단순히 가능 여부만 파악하면 됩니다...

아니면, 패스워드로 해당 계정의 패스워드와 일치한지 정도만 알아도 좋습니다...

단, root 계정은 아닙니다!!

혹시 방법이 있을까요??

익명 사용자의 이미지

로그인하지 않고 로그인 가능한지 알 수 있는 방법은 없습니다. (없다고 단언하긴 그렇지만 왜 굳이 그런 방법을 만들까요? 해킹하라고?)
대신 쉘스크립트에서 id/pw를 입력하는 방법이 무엇인가요? 가 올바른 질문이겠습니다.
이게 필요한 상황인가요?

ssoobebe의 이미지

해당 기능이 필요한 이유는 다음과 같습니다.

리눅스에서 자동 로그인이 가능하도록 계정과 패스워드를 rc.local에 하드코딩 해둔 상태 입니다. (계정/패스워드를 통해 자동 로그인 가능)

해당 계정의 패스워드를 변경한 후, 스크립트를 통해 rc.local에도 하드코딩된 패스워드를 변경하고 싶습니다.

쉘 스크립트에서 read를 통해 변경된 패스워드를 입력 후, 입력한 패스워드를 통해 로그인 가능 여부를 알고 싶었습니다. (즉, 계정과 패스워드를 입력하고 로그인 가능 여부 확인 후 rc.local에 반영)

현재, 불가능하다고 판단하지만, 혹여 방법이 있을까 싶어 글을 남겼습니다....

익명 사용자의 이미지

꼭 로그인을 하지 말아야할 이유는 없는거네요. 해당 머신에 ssh 서버가 실행 중에 있다면,

user="any-id"
pw="password" 
if sshpass -p $pw ssh -l $user localhost true 2> /dev/null ; then
    # update rc.local here
fi
익명 사용자의 이미지

자동로그인이 가능하도록 파일에 하드코딩.. 이 부분은 뭐 어쩔 수 없는 사정이 있겠지요..

ssoobebe의 이미지

부족한 질문에 답변 감사 드립니다.

아쉽게도, 해당 장비는 ssh가 없습니다.

외부와 연결할 수 없는 머신입니다...

또한, 해당 리눅스의 특성으로 하드코딩으로 밖에 자동 로그인을 진행할 수 밖에 없었습니다...

익명 사용자의 이미지

그럼 expect 가 설치가능하다면 그것을 사용해서 passwd를 넣어주면 됩니다.

ssoobebe의 이미지

expect를 설치할 수 없는 환경 입니다.

또한, 현재 expect가 따로 설치되어 있지 않습니다.....

그래도 덕분에 expect 사용법을 확인할 수 있는 기회였습니다. 감사합니다.

익명 사용자의 이미지

재밌네요. 그럼 이건 되나 봅시다.

user="user"
pw="password"
echo -e "$pw\n$pw" | su -c /usr/bin/true $user
if [ $? -eq 0 ]; then
   echo good
fi
<code>
익명 사용자의 이미지

user="user"
pw="password"
echo -e "$pw" | su -c /usr/bin/true $user
if [ $? -eq 0 ]; then
   echo good
fi
ssoobebe의 이미지

답변에 감사드립니다.

echo -e "$password" | su -c /usr/bin/true $id_name
if [ $? -eq 0 ];then
	echo good
else
	echo not good
fi
 
$id_name: /usr/bin/true: not found로 나와 $?이 1로 나옵니다.
 
아마 Not Found로 인해 직전값을 1로 인지하는 것 같습니다....
 
true 명령어를 활용하는 방법은 좋은 방향인 것 같습니다.
 
다른 방법으로 진행을 해보도록 하겠습니다.
 
감사합니다!!!!!!
익명 사용자의 이미지

/usr/bin/true 대신 아무거나, 예를 들어 echo 로 하면 되겠네요

ssoobebe의 이미지

답변에 늦게 질문 드려 죄송합니다.

echo로 대신하라는 말씀이 이해가 되지 않습니다...

su -c가 로그인 없이 사용하기 위한 옵션이고, 계정과 패스워드 입력을 미리 설정하여 oper로 echo를 하라는 것으로 이해를 했습니다...

허나, 해당 명령어는 정확히 수행이 되지 않습니다...

아래 같이 수정을 말씀하시는건가요??

echo -e "$password" | su -c echo "$id_name"
if [ $? -eq 0 ];then
	echo good
else
	echo not good
fi
익명 사용자의 이미지

제한적인 단말 환경인듯한데, 차라리 root권한을 획득할 방법을 찾거나,
아니면 /etc/shadow 파일 퍼미션을 열어 놓고,
이 파일로 pw 검사를 하는게 더 나은 방법일 지도 모르겠네요.

ssoobebe의 이미지

답변에 감사드립니다.

우선, 보안상의 문제로 shadow 파일의 퍼미션은 건들 수 없습니다....

또한, 패스워드를 읽어서 처리하는 방안으로 생각했으나, 이럴 경우, 어플리케이션이 따로 동작이 필요해서

방향을 잡기가 쉽지가 않네요... 간단하게 쉘로 처리하고 싶었습니다.....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.