Olá Gabriel.
Seu código parece funcionar conforme foi pensado.
Pode ocorrer de dar um erro quando você digita a senha (123 por exemplo) e depois a erra no login (125, por exemplo). Daí, continuando, se tenta somente digitar um login correto em seguida (123) ele diz que a senha está errada. Se for este problema a que se refere, ele está no fato de que seu input.value está assim:
input.value = " "; com duas aspas e um espaço no meio;
quando deveria estar assim:
input.value = "";, com duas aspas e vazio no meio.
Do jeito que colocou, ele já insere um espaço em branco, e se você digita a senha correta (123), o input.value vai ser 123 com um espaço no começo, o que não é a senha correta.
Fora isto, uma recomendação é a indentação adequada do código, e o uso de ponto e vírgula ao final de cada linha de comando, e uso de maiúscula na definição do charset (UTF ao invés de utf) como boa prática e para melhor visualização:
<meta charset="UTF-8">
<input/>
<button>login</button>
<script>
var senha = prompt("coloque uma senha");
var input = document.querySelector("input");
input.focus();
function login(){
if(input.value == senha){
alert("login executado com sucesso");
} else {
alert("senha errada tente de novo");
}
input.value = "";
input.focus();
}
var button = document.querySelector("button");
button.onclick = login;
</script>